【问题标题】:C++ - Cin.ignore and get data from other FileC++ - Cin.ignore 并从其他文件中获取数据
【发布时间】:2018-10-23 22:43:13
【问题描述】:

我有一个输入文件并试图从我的文件中获取一些数据并显示在输出中。

文件中的数据是:

SS
0
NN
1

XX
10
YY
20

和我的代码:

ifstream inFile;
inFile.open("input.txt");

string s1, s3;
int n2, n4;

while ( inFile ) {

    getline(inFile, s1);
    cout << "1: " << s1 << endl;

    inFile >> n2;
    cout << "2: " << n2 << endl;
    inFile.ignore(1000, '\n');

    getline(inFile, s3);
    cout << "3: " << s3 << endl;

    inFile >> n4;
    cout << "4: " << n4 << endl;
    inFile.ignore(1000,'\n');

    cout << endl;
}

检查输出时!输出是:

1: SS
2: 0
3: NN
4: 1

1:
2: 0
3: NN
4: 1

我认为我的问题应该是因为inFile.ignore()
你能帮我解释一下这是怎么回事吗?

【问题讨论】:

  • 你的问题是什么,你想要完成什么?

标签: c++ iostream


【解决方案1】:
while ( inFile ) {

  getline(inFile, s1);
  cout << "1: " << s1 << endl;

  inFile >> n2;
  cout << "2: " << n2 << endl;

提取失败时您正在处理垃圾。

#include <cstdlib>
#include <string>
#include <fstream>
#include <iostream>

int main()
{
    std::ifstream inFile{ "input.txt" };
    if (!inFile.is_open())
        return EXIT_FAILURE;

    std::string s1, s3;
    int n2, n4;

    while (inFile >> s1 >> n2 >> s3 >> n4)
        std::cout << "1: " << s1 << "\n2: " << n2 << "\n3: " << s3 << "\n4: " << n4 << "\n\n";
}

输出:

1: SS
2: 0
3: NN
4: 1

1: XX
2: 10
3: YY
4: 20

如果字符串真的可以包含空格并且两个数据集用空行分隔:

#include <limits>

// ...

while (std::getline(inFile, s1) && (inFile >> n2) &&
       inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n') &&
       std::getline(inFile, s3) && (inFile >> n4))
{
    std::cout << "1: " << s1 << "\n2: " << n2 << "\n3: " << s3 << "\n4: " << n4 << "\n\n";
    inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 2020-12-29
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多