Использование ignore()
+ getline()
:
На первой итерации l oop, cin.ignore()
пропускает разрыв строки, оставшийся после cin>>test
, затем cin.getline()
читает всю строку (Hacker
) , включая, но проглатывая разрыв строки .
На второй итерации l oop, cin.ignore()
пропускает 1-й символ следующего (R
), а затем cin.getline()
читает оставшиеся символы в той же строке (ank
), включая, но глотая разрыв строки.
Решение состоит в том, чтобы переместить вызов на cin.ignore()
для выше l oop:
cin>>test;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // <-- move here
for(int j = 0; j < test; j++){
char str[10000];
cin.getline(str,9999);
...
}
Использование operator>>
:
На первой итерации l oop, cin>>str
пропускает разрыв строки, который был оставлен после cin>>test
и затем считывает следующее доступное слово (Hacker
).
На второй итерации l oop, cin>>str
пропускает разрыв строки, оставшийся после предыдущего cin>>str
и затем читает следующее доступное слово (Rank
).