Я хочу решить конкурсную задачу по программированию (C ++ с XCode), которая имеет относительно большой ввод (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;
}
Если я выполню его и скопирую 340 строк с «aaaaaaaaaa» в консоль, это не закончится. Если я остановлю его с помощью отладчика, он скажет, что я = 92. Если я продолжу, он выйдет.
Но когда я копирую кусочки по 50 строк в консоль, она немедленно завершает работу, как и должно быть …
Кто-нибудь может мне с этим помочь?
PS: я вставил ‘ios_base :: sync_with_stdio (false);’, потому что я прочитал, что это приведет к потере ввода.
Я хочу решить конкурсную задачу по программированию (C ++ с XCode), которая имеет относительно большой ввод (300 строк). При копировании тестового ввода в консоль, он не читает все это
Это возможно, если у вас более одного слова в строке, потому что cin >> xx
будет читать слова, а не строки.
Вам нужно будет использовать метод getline на самом деле читать строки.
while (getline(cin, xxx));
Если я выполню его и скопирую 340 строк с «aaaaaaaaaa» в консоль, это не закончится. Если я остановлю это с помощью отладчика, он говорит, что я = 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;
}
cin >> string
вводит слова, а не строки. Пытаться:
string xxx;
while (getline(cin, xxx)) {
;
}
ввести полную строку за раз в xxx
,
Я не смог решить проблему с X-Code, но он работает с Qt. Поэтому я использую Qt сейчас.