我想解决一个编程竞赛任务(带有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);',因为我读到这会使输入变为现实。
答案 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。