массивы — анализ текстового файла Переполнение стека

Я пытался проанализировать текстовый файл в 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'

Может кто-нибудь объяснить, как это исправить и есть ли более простой способ для меня, чтобы прочитать неизвестные целые числа в файле

0

Решение

s1 указатель на int, в то время как i является инт. По сути, вы проверяете, 6 < 0x55ddab,

Правильный способ сделать это: i < *s1

Кроме того, не забудьте delete s1 прежде чем ваш цикл пока повторяется.

Кроме того, я просто хочу отметить, что то, что вы делаете, не имеет смысла, тем не менее, используя i < *s1 исправит вашу ошибку.

0

Другие решения

s1 это массив intsЭто означает, что когда вы используете имя s1 без индекса это указатель. Следовательно, ваше сравнение i < s1 спрашивает, если i меньше, чем адрес s1и это недопустимое сравнение. Ваша строка кода должна выглядеть так:

for (i = 0; i < num; i++)

Также, inFile.eof() не делает то, что вы думаете. Единственный способ получить EOF на inFile если пользователь нажимает Ctrl + D Вам нужно, чтобы пользователь ввел какое-нибудь значение часового, чтобы сигнализировать об окончании ввода; например, 0 или -1 или другое недопустимое значение.

0

По вопросам рекламы [email protected]