[英]Text file parsing C++
我一直试图通过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
是一个int。 因此,基本上您正在做的是检查6 < 0x55ddab
。
正确的方法是: i < *s1
另外,不要忘记在while循环重复之前delete s1
。
另外,我只是要记下您的操作没有任何意义,但是使用i < *s1
可以解决您的错误。
s1
是一个ints
数组,这意味着当您使用名称s1
而不使用索引时,它是一个指针。 因此,您对i < s1
比较会询问i
是否小于s1
的地址,但这不是有效的比较。 您的代码行应如下所示:
for (i = 0; i < num; i++)
另外, inFile.eof()
并没有按照您的想法做。 在inFile
上获得EOF的唯一方法是用户输入ctrl + D。 您应该让用户输入一些标记值来表示输入结束。 例如0或-1或其他无效值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.