Я пытался проанализировать текстовый файл в C ++, чтобы прочитать числа, содержащиеся в файле. Количество целых чисел в каждой строке и количество строк неизвестно. Когда все целые числа будут прочитаны, они сохранят это целое число, за которым следуют ‘,’ и промежуточный итог этой строки. Затем он будет выведен в файл, выбранный пользователем. Код, который я написал, выглядит следующим образом:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
int i=0,b = 0,num = 100;
int *s1;
string myfilename, mystring, filename;
cout << "Enter the name of the file to open:" << endl;
cin >> myfilename;
cout << "Enter the name of the output file" << endl;
cin >> filename;
ifstream inFile;
ofstream outFile("C:\\Users\\Aidan Howie\\Documents\\University\\Second Year\\C++\\" + filename + ".txt");
inFile.open("C:\\Users\\Aidan Howie\\Documents\\University\\Second Year\\C++\\" + myfilename + ".txt");
if (!inFile)
{
cout << "Cannot open file" << endl;
return -1;
}
while (!inFile.eof())
{
s1 = new int[num];
for (i = 0; i < s1; i++)
{
cout << i << "," << (i + b) / s1;
b = i+b;
cout << endl;
}
}
inFile.close();
system("PAUSE");
}
Однако получите ошибку:
error C2446: '<' : no conversion from 'int *' to 'int'
Может кто-нибудь объяснить, как это исправить и есть ли более простой способ для меня, чтобы прочитать неизвестные целые числа в файле
s1
указатель на int, в то время как i
является инт. По сути, вы проверяете, 6 < 0x55ddab
,
Правильный способ сделать это: i < *s1
Кроме того, не забудьте delete s1
прежде чем ваш цикл пока повторяется.
Кроме того, я просто хочу отметить, что то, что вы делаете, не имеет смысла, тем не менее, используя i < *s1
исправит вашу ошибку.
s1
это массив ints
Это означает, что когда вы используете имя s1
без индекса это указатель. Следовательно, ваше сравнение i < s1
спрашивает, если i
меньше, чем адрес s1
и это недопустимое сравнение. Ваша строка кода должна выглядеть так:
for (i = 0; i < num; i++)
Также, inFile.eof()
не делает то, что вы думаете. Единственный способ получить EOF на inFile
если пользователь нажимает Ctrl + D Вам нужно, чтобы пользователь ввел какое-нибудь значение часового, чтобы сигнализировать об окончании ввода; например, 0 или -1 или другое недопустимое значение.