我需要从文本文件中存储一个整数数组,但我无法找到我需要做的事情。我认为我有代码设置的基础,但我认为我需要将元素转换为整数或其他东西?
我的输出是我的清单:
50 0 20 10 18 -5 15 22 34 -1
但我的"排序"列表最终为-1,以及一系列大的负数。 我解决了这个数组错误的问题。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int array1[30];
int counter=0,n=0;
fstream datafile;
void bubbleSort(int list[], int length);
void selectionSort(int list[], int length);
/////////////
datafile.open("data.txt");
if (!datafile.is_open())
{
cout << "Failure to open." << endl;
return 0;
}
while (!datafile.eof()) {
datafile >> array1[counter];
n++;
cout << array1[counter] << endl;
}
datafile.close();
//////////////////////////////
//bubbleSort(array1, n);
//selectionSort(array1, n);
for (int i = 0; i < n; i++)
cout << array1[i] << ", ";
system("pause");
return 0;
}
答案 0 :(得分:1)
永远不要使用eof()
,因为它会导致错误的程序。请参阅https://stackoverflow.com/a/5837670了解原因。
while (n < 30 && datafile >> array1[n]) {
cout << array1[n] << endl;
n++;
}
{
int excess;
if (datafile >> excess) {
cerr << "error: data file too large\n";
return;
}
}
这样,n
在程序结束时就会正确。
答案 1 :(得分:0)
你的代码很好,除了:
while (!datafile.eof()) {
datafile >> array1[counter];
n++;
cout << array1[counter] << endl;
}
应该是:
while (!datafile.eof()) {
datafile >> array1[n];
if ( datafile.fail() ) break;
cout << array1[n] << endl;
n++;
}
只需要一个索引变量(n
)就可以解析/存储到一维数组中。
一段时间内的增量语句n++
应始终是最后一个,以便您处理当前元素而不是下一个元素。
代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int array1[30];
int n=0;
fstream datafile;
void bubbleSort(int list[], int length);
void selectionSort(int list[], int length);
/////////////
datafile.open("data.txt");
if (!datafile.is_open())
{
cout << "Failure to open." << endl;
return 0;
}
while (!datafile.eof()) {
datafile >> array1[n];
if (datafile.fail()) break;
cout << array1[n] << endl;
n++;
}
datafile.close();
for (int i = 0; i < n; i++)
cout << array1[i] << ", ";
system("pause");
return 0;
}