Я пытаюсь проанализировать текстовый файл в 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
- это массив из ints
, что означает, что когда вы используете имя s1
без индекса, это указатель. Следовательно, ваше сравнение i < s1
спрашивает, является ли i
меньше, чем адрес s1
, и это не действительное сравнение. Ваша строка кода должна выглядеть так:
for (i = 0; i < num; i++)
Кроме того, inFile.eof()
не делает то, что вы считаете. Единственный способ, которым вы собираетесь получить EOF в inFile
- это тип пользователя ctrl + D. У вас должен быть пользователь, который вводит какое-то контрольное значение, чтобы сигнализировать о конце ввода; например, 0 или -1 или другое другое недопустимое значение.
inFile
, это было бы хорошим началом
s1
- указатель на int, а i
- int. Таким образом, по существу, вы делаете проверку, если 6 < 0x55ddab
.
Правильный способ сделать это: i < *s1
Кроме того, не забудьте delete s1
до повторения цикла while.
Кроме того, я просто хочу отметить, что то, что вы делаете, не имеет смысла, тем не менее, используя i < *s1
вы исправите свою ошибку.
i < *s1
тоже не имеет смысла.
s1
- указатель на целое число, а i
- целое число, имеет смысл. Он берет int i
и int, на которые указывает s1
и сравнивает их.
*si
илиsi[index]
. Также я не вижу, чтобы вы устанавливали какие-либо значения наs1
. Вы только инициализируете его оператором new, который может выдавать0
или значения мусора.