从文件中读取数据到数组中
Reading data from file into an array
程序输出应该是:
The numbers are: 101 102 103 104 105 106 107 108 108 110
但我的输出是:
The numbers are: 0 0 0 0 0 0 0 0 1606416272 32767
这是我的代码:
// This program reads data from a file into an array.
#include <iostream>
#include <fstream> // To use ifstream
using namespace std;
int main()
{
const int ARRAY_SIZE = 10; // Array size
int numbers[ARRAY_SIZE]; // Array number with 10 elements
int count = 0; // Loop counter variable
ifstream inputFile; // Input file stream object
// Open the file.
inputFile.open("TenNumbers.rtf");
// Read the numbers from the file into the array.
while (count < ARRAY_SIZE && inputFile >> numbers[count]){
count++;
}
// Close the file.
inputFile.close();
// Display the numbers read:
cout << "The numbers are: ";
for (count = 0; count < ARRAY_SIZE; count++){
cout << numbers[count] << " ";
}
cout << endl;
return 0;
}
这是我正在从中读取数据的 TenNumbers.rtf 文件的内容:
101
102
103
104
105
106
107
108
109
110
更新 1:
我尝试使用 txt 文件,但结果相似。
The numbers are: 0 0 0 0 0 0 0 0 1573448712 32767
更新 2:
我找到了问题所在。在 运行 if (inputFile.good())
之后我发现文件没有被打开。
您的文件名有 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] << " ";
}
这很可能会揭示读取数据时的任何问题。
ARRAY_SIZE
是你在数组中分配的int
个数;也就是说,它是 int
的最大数量。
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",但这没有什么区别。
RTF 文件不仅仅是纯文本(它被标记包围)并且字符编码可能不同,从而导致对数字的错误解释。
因此,在您的阅读循环中:
// Read the numbers from the file into the array.
while (count < ARRAY_SIZE && inputFile >> numbers[count]){
count++;
}
输入流 inputFile
默认情况下会跳过空格,在您的情况下,这些空格的编码可能会有所不同,从而以某种方式被跳过或弄乱。
注意:尝试并添加一个测试行,在将其存储在数组中之前打印读数。
您好,我已经编译了您的代码,使用 .txt 它运行良好,没有给出您看到的 strage numbers。
所以很可能你打开的是一个不存在的文件,或者不能红
// 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++)
我以前也遇到过这个问题。我将内容复制到一个新文件中并另存为不同的名称。然后再运行就好了
程序输出应该是:
The numbers are: 101 102 103 104 105 106 107 108 108 110
但我的输出是:
The numbers are: 0 0 0 0 0 0 0 0 1606416272 32767
这是我的代码:
// This program reads data from a file into an array.
#include <iostream>
#include <fstream> // To use ifstream
using namespace std;
int main()
{
const int ARRAY_SIZE = 10; // Array size
int numbers[ARRAY_SIZE]; // Array number with 10 elements
int count = 0; // Loop counter variable
ifstream inputFile; // Input file stream object
// Open the file.
inputFile.open("TenNumbers.rtf");
// Read the numbers from the file into the array.
while (count < ARRAY_SIZE && inputFile >> numbers[count]){
count++;
}
// Close the file.
inputFile.close();
// Display the numbers read:
cout << "The numbers are: ";
for (count = 0; count < ARRAY_SIZE; count++){
cout << numbers[count] << " ";
}
cout << endl;
return 0;
}
这是我正在从中读取数据的 TenNumbers.rtf 文件的内容:
101
102
103
104
105
106
107
108
109
110
更新 1: 我尝试使用 txt 文件,但结果相似。
The numbers are: 0 0 0 0 0 0 0 0 1573448712 32767
更新 2:
我找到了问题所在。在 运行 if (inputFile.good())
之后我发现文件没有被打开。
您的文件名有 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] << " ";
}
这很可能会揭示读取数据时的任何问题。
ARRAY_SIZE
是你在数组中分配的int
个数;也就是说,它是 int
的最大数量。
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",但这没有什么区别。
RTF 文件不仅仅是纯文本(它被标记包围)并且字符编码可能不同,从而导致对数字的错误解释。
因此,在您的阅读循环中:
// Read the numbers from the file into the array.
while (count < ARRAY_SIZE && inputFile >> numbers[count]){
count++;
}
输入流 inputFile
默认情况下会跳过空格,在您的情况下,这些空格的编码可能会有所不同,从而以某种方式被跳过或弄乱。
注意:尝试并添加一个测试行,在将其存储在数组中之前打印读数。
您好,我已经编译了您的代码,使用 .txt 它运行良好,没有给出您看到的 strage numbers。 所以很可能你打开的是一个不存在的文件,或者不能红
// 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++)
我以前也遇到过这个问题。我将内容复制到一个新文件中并另存为不同的名称。然后再运行就好了