繁体   English   中英

文本文件解析C ++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM