无法读取包含2列(C ++)的txt文件中的整数

时间:2016-02-10 22:03:01

标签: c++ text-files

我必须编写一个代码,提示用户输入文件名(包含2列整数)。然后程序读取该文件,打印出设置的数字。

我的txt文件看起来像这样(数字用空格分隔):

2 3

5 6

7 8

8 9

5 7

我觉得这很容易,但现在我卡住了。当我运行程序时,出现了这一行

“文件中没有数字。”

我将数字设置为“int”,为什么编译器无法读取数字?但是当我将类型更改为“字符串”时,数字确实显示为O_O,因为我后来还需要计算那些数字的平均值,我不能使用字符串。

这是我的代码,感谢任何帮助TT ___ TT

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

int main()
{
    ifstream in_file;
    string filename;
    int number;
    int number1;
    cout << "In order to process, please enter the file name: ";
    cin >> filename;
    in_file.open(filename.c_str());
    if (!in_file.is_open())
    {
        cout << "Cannot open file" << endl;
    }
    else
    {
        in_file >> number;
        if (in_file.fail())
        {
            cout << "There're no number in the file." << endl;
        }
        while (in_file >> number >> number1)
        {
            cout  << number << " " << number1;
        }
    }

system("pause");
return 0;
}

2 个答案:

答案 0 :(得分:1)

逻辑错误:

    in_file >> number;   // Assigns 2 from first line to number
    if (in_file.fail())
    {
        cout << "There're no number in the file." << endl;
    }

    while (in_file >> number >> number1) // Assigns 3 to number from first line
                                         // and assigns 5 to number1 from second line
    {
        cout  << number << " " << number1;
    }

您只需使用:

    while (in_file >> number >> number1)
    {
        cout  << number << " " << number1;
    }

如果必须打印“文件中没有数字。”在输出中,您可以使用:

    bool gotSomeNumbers = false;
    while (in_file >> number >> number1)
    {
        cout  << number << " " << number1;
        gotSomeNumbers = true;
    }

    if (!gotSomeNumbers)
    {
         cout << "There're no number in the file." << endl;
    }

答案 1 :(得分:0)

  

您用来查找文件是否为空的方法不是   按以下方式更正::一旦执行此行

in_file >> number;
     

编译器将第一行视为整数整数,即   数字=&#34; 2 3&#34;在给定的情况下。现在这不是标准数字   因为2到3之间的空间和

     

in_file.fail()将返回true。

     

正确的方法是使用&#34; eof&#34;功能如下:(我也补充说   如上所述,1-2行计算这些数字的平均值)

Correct code

  

参考:       When will ofstream::open fail?       Checking for an empty file in C++