C ++程序并没有完全读取大量输入。为什么?

时间:2014-04-14 21:08:09

标签: c++ xcode input copy-paste

我想解决一个编程竞赛任务(带有XCode的C ++),它具有相对较大的输入(300行)。将测试输入复制到控制台时,它不会全部读取。 所以我写了一个简约的测试程序,只需阅读300行:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    ios_base::sync_with_stdio(false);

    string xxx;
    for(int i = 0; i < 300; i++)
        cin >> xxx;
    return 0;
}

如果我执行它并将带有“aaaaaaaaaa”的340行复制到控制台中,它就不会结束。如果我用调试器停止它,它会说i = 92.如果我继续,它会退出。 但是,当我将50条线条复制到控制台时,它会立即退出......

任何人都可以帮我吗?

PS:我插入'ios_base :: sync_with_stdio(false);',因为我读到这会使输入变为现实。

3 个答案:

答案 0 :(得分:2)

  

我想解决一个编程竞赛任务(带有XCode的C ++),它具有相对较大的输入(300行)。将测试输入复制到控制台时,它不会全部读取

当每行有多个单词时,这是可能的,因为cin >> xx会读取单词而不是行。

您需要使用getline method来实际读取行。

while (getline(cin, xxx));
  

如果我执行它并将带有“aaaaaaaaaa”的340行复制到控制台中,它就不会结束。如果我用调试器停止它,它会说i = 92。

是的,这是完全相同的症状。即使你每行只有一个单词,你只能达到300行,而不是340行。

以下是我要编写的完整代码供您参考:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    ios_base::sync_with_stdio(false);

    string xxx;
    while (getline(cin, xxx))
        cout << xxx << endl;
    return 0;
}

答案 1 :(得分:0)

cin >> string输入单词,而不是行。尝试:

string xxx;

while (getline(cin, xxx)) {
  ;
}

一次输入一整行到xxx

答案 2 :(得分:0)

我无法解决X-Code的问题,但它适用于Qt。所以我现在使用Qt。