程序输出应为:
数字为:101 102 103 104 105 106 107 108 108 110
但我的输出是:
数字为:0 0 0 0 0 0 0 0 1606416272 32767
这是我的代码:
{{1}}
这是TenNumbers.rtf文件的内容,我正在阅读以下数据:
{{1}}
更新1: 我尝试使用txt文件,但结果类似。
数字为:0 0 0 0 0 0 0 0 1573448712 32767
更新2: 我找到了问题所在。运行{{1}}后,我发现文件没有打开。
答案 0 :(得分:2)
您好我已编译您的代码,.txt运行良好,没有给出您看到的strage数字。 因此,您可能正在打开一个不存在或不能为红色的文件。
// This program reads data from a file into an array.
#include <iostream>
#include <fstream> // To use ifstream
#include <vector>
using namespace std;
int main()
{
std::vector<int> numbers;
ifstream inputFile("c.txt"); // Input file stream object
// Check if exists and then open the file.
if (inputFile.good()) {
// Push items into a vector
int current_number = 0;
while (inputFile >> current_number){
numbers.push_back(current_number);
}
// Close the file.
inputFile.close();
// Display the numbers read:
cout << "The numbers are: ";
for (int count = 0; count < numbers.size(); count++){
cout << numbers[count] << " ";
}
cout << endl;
}else {
cout << "Error!";
_exit(0);
}
return 0;
}
此代码段检查文件是否存在,如果没有则引发错误,并使用向量(更适合在c ++中)
答案 1 :(得分:1)
您的文件名后缀为rtf
。它中是否包含任何RTF信息?
我在您的代码中看到的错误是您假设在打印数字时已成功读取ARRAY_SIZE
个int
个数。
使用:
// Display the numbers read:
cout << "Number of ints read: " << count << std::endl;
cout << "The numbers are: ";
for (int i = 0; i < count; i++){
cout << numbers[i] << " ";
}
这很可能会在阅读数据时发现任何问题。
答案 2 :(得分:1)
ARRAY_SIZE
是您在数组中分配的int
个数;也就是说,它是int
s的最大数量。
count
是从文件中读取的实际内存数。因此,您的最终循环应该达到count
,因为这是实际数据的数量。因此,打印数据的循环应为:
int i;
for (i = 0; i < count; ++i)
cout << numbers[count] << " ";
或者你可以走指针:
int *start;
for (start = numbers; (numbers - start) < count; ++numbers)
cout << *numbers << " ";
另外,我认为文件扩展名应该是“txt”而不是“rtf”,但这并没有什么区别。
答案 3 :(得分:0)
RTF 文件不仅仅是纯文本(它被标记包围),并且字符编码可能不同,从而导致对数字的错误解释。
所以,在你的阅读循环中:
// Read the numbers from the file into the array.
while (count < ARRAY_SIZE && inputFile >> numbers[count]){
count++;
}
默认情况下,输入流inputFile
正在跳过空格,在您的情况下可能会以不同方式进行编码,从而以某种方式跳过或搞砸。
注意:在将数据存储到数组中之前,请尝试并添加测试行,以打印读取的数字。
答案 4 :(得分:0)
我之前也遇到过这个问题。我将内容复制到一个新文件中并另存为不同的名称。然后再运行就好了。