当我尝试读取外部文本文件时遇到问题。 显示的文本是正确的,但是当将数据保存到数组中时,似乎是错误的。
我的输入数字是4 2 8 0 2 3 0 4 0 5,但是在循环通过数组后,出现[i],仅出现“48”。
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>
void begin ();
void Process (string);
using namespace std;
int main()
{
begin();
system("pause");
return 0;
}
void begin (void){
string file = "data.txt";
Process(file);
}
void Process (string file)
{
int i=0,ch, n = 0, temp, a[50];
ifstream infile;
infile.open(file.c_str());
错误似乎是由此引起的。
if(infile.is_open())
{
cout << "File to be read: " << file << endl;
cout << "\n\n";
infile >> temp;
while(!infile.fail())
{
cout << temp << " ";
infile >> temp;
a[i] = temp;
i++;
n++;
}
cout << "\n\n";
cout << "This file has " << n << " numbers. \n\n";
}
else
cout << "The file isn't available! \n\n";
infile.close();
当我尝试输出结果时,只显示48。
for (int z = 0; z < i; z++)
{
cout << a[i] << endl;
}
}
我是新来的。请帮忙。提前谢谢。
答案 0 :(得分:1)
您的显示循环正在使用i
代替z
来索引a
(这应该是变量命名重要的一个很好的教训!)将显示循环更改为:
for (int z = 0; z < i; z++)
{
cout << a[z] << endl;
}
您的代码可能存在更多问题,但这似乎阻碍了您。考虑将i
和a
重命名为更有意义的事情。当你花时间去理解你的意思时,打字的时间总是相形见绌。
答案 1 :(得分:0)
考虑这个循环
for (int z = 0; z < i; z++)
{
cout << a[i] << endl;
}
您总是输出一个元素a [i]而不是[z]。此外,没有分配索引为i的元素。最后分配的元素是[i-1]。
除此之外,您不会将第一个输入的数字保存在数组中。您开始保存第二个数字中输入的数据。
infile >> temp; // <== this value was not assigned to an element of the array
while(!infile.fail())
{
cout << temp << " ";
infile >> temp;
a[i] = temp;
此循环内的语句
infile >> temp;
会导致错误。所以在那之后没有意义写
a[i] = temp;
因为没有输入任何内容,实际上您会将之前的数字存储在下一个元素中。