std::cin
将换行符解释为空格,因此您正在使用的文件可能包含换行符以外的内容。您还使用非标准扩展来声明数组。这不是可移植的,也不保证所有编译器都支持。我建议你改用使用std::vector
。
您的for
循环也不正确。数组使用从零开始的索引来访问它们的元素。因此,您最终会越界访问数组,这是未定义的行为。这意味着您的程序可能会崩溃,它可能会覆盖其他变量,或者您可能根本没有注意到任何症状。如果它覆盖其他变量,这也可能导致您遇到的症状。
下面的示例使用 C++ 输入流而不是scanf
提供更好的错误检查。
#include <istream>
#include <vector>
std::vector<int> load(std::istream& in)
{
std::size_t count;
std::vector<int> data;
// If the user does not enter a number "in >> count" will fail.
if (in >> count)
{
int value;
while (count-- && in >> value)
data.push_back(value);
}
return data;
}
#include <iostream>
int main()
{
auto data = load(std::cin);
for (auto i : data)
std::cout << i << std::endl;
}
std::stringstream
您可以通过使用作为输入来测试它而无需从文件中读取。
#include <iostream>
#include <sstream>
int main()
{
std::stringstream text("3\n5 2 4");
auto data = load(text);
for (auto i : data)
std::cout << i << std::endl;
}