C++读取20个整数存数组并去重打印时遇0x80070002错误求助
嘿,这个错误码0x80070002其实是Windows系统的「文件找不到」错误,结合你代码里的#include "stdafx.h",大概率是Visual Studio预编译头的配置或者文件缺失问题,我帮你拆解下解决办法,顺便补全你要的去重功能代码:
一、先解决「无法打开文件」的错误
这个错误的核心是编译器找不到stdafx.h文件,有两种处理方式:
方式1:移除预编译头依赖(推荐新手用)
如果你不是必须用预编译头(绝大多数新手项目都不需要),直接删掉代码里的#include "stdafx.h",然后在Visual Studio里调整项目设置:
右键项目 → 属性 → 配置属性 → C/C++ → 预编译头 → 把「预编译头」选项改成不使用预编译头,应用保存后重新编译即可。方式2:修复预编译头文件
如果你确实需要用预编译头,先检查项目目录里是否存在stdafx.h和stdafx.cpp文件:- 如果没有,手动新建这两个文件:
stdafx.h可以是空文件,stdafx.cpp里只需要写#include "stdafx.h"; - 然后在项目设置里把预编译头设为使用预编译头,并指定「预编译头文件」为
stdafx.h。
- 如果没有,手动新建这两个文件:
二、补全你要的「仅保留首次出现实例」的完整代码
这里我用unordered_set来高效记录已经出现过的整数,逻辑清晰且性能不错:
#include <iostream> #include <unordered_set> int main() { const int SIZE = 20; int input[SIZE]; // 读取用户输入的20个整数 std::cout << "请输入20个整数:\n"; for (int i = 0; i < SIZE; ++i) { std::cin >> input[i]; } // 遍历数组,仅打印首次出现的元素 std::cout << "\n仅保留首次出现的结果:\n"; std::unordered_set<int> seen_numbers; for (int num : input) { // 如果当前数没出现过,就打印并加入已记录集合 if (seen_numbers.find(num) == seen_numbers.end()) { std::cout << num << " "; seen_numbers.insert(num); } } std::cout << "\n"; return 0; }
额外备选方案(不用STL的手动实现)
如果你还没学过STL容器,也可以用一个额外数组手动记录已出现的数,代码稍微繁琐但逻辑简单:
#include <iostream> int main() { const int SIZE = 20; int input[SIZE]; // 读取输入 std::cout << "请输入20个整数:\n"; for (int i = 0; i < SIZE; ++i) { std::cin >> input[i]; } // 手动去重打印 std::cout << "\n仅保留首次出现的结果:\n"; int seen[SIZE]; int seen_count = 0; for (int num : input) { bool exists = false; // 检查当前数是否已经出现过 for (int i = 0; i < seen_count; ++i) { if (seen[i] == num) { exists = true; break; } } if (!exists) { std::cout << num << " "; seen[seen_count++] = num; } } std::cout << "\n"; return 0; }
内容的提问来源于stack exchange,提问作者DoNotResuscitate
相关产品推荐
相关产品推荐

