为什么循环在第一次迭代中跳过输入?
why loop is skipping input in first iteration?
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
主要功能
int main(){
long long int T;
string s;
cin >> T;
while(T--){
getline(cin, s);
cout << s << endl;
}
}
while 循环在第一次迭代时跳过输入
只打印空行
我想在每次迭代时将字符串作为输入传递,但在第一次迭代时 while 循环会跳过输入行。
cin >> T
读到数字的末尾,而不是读到行的末尾。
因此,在第一个 getline(cin, s);
中,您阅读了数字之后的其余行。
您可以在 cin >> T;
之后立即调用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
以忽略该行中剩余的所有内容。
您需要使用 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
,因为它会忽略 "\n"
或 EOF
.
之前的其余行
现在 std::numeric_limits<std::streamsize>::max()
基本上是在告诉 cin
要忽略的字符数没有限制。
此外,使用 for
循环可能更有意义。
例如:
#include <iostream>
#include <string>
int main()
{
long long int T;
std::cin >> T;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
for (int i = 0; i < T; i--)
{
std::string s;
std::getline (std::cin, s);
std::cout << s << std::endl;
}
return 0;
}
另请查看为什么您不应该使用 using namespace std;
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
主要功能
int main(){
long long int T;
string s;
cin >> T;
while(T--){
getline(cin, s);
cout << s << endl;
}
}
while 循环在第一次迭代时跳过输入 只打印空行
我想在每次迭代时将字符串作为输入传递,但在第一次迭代时 while 循环会跳过输入行。
cin >> T
读到数字的末尾,而不是读到行的末尾。
因此,在第一个 getline(cin, s);
中,您阅读了数字之后的其余行。
您可以在 cin >> T;
之后立即调用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
以忽略该行中剩余的所有内容。
您需要使用 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
,因为它会忽略 "\n"
或 EOF
.
现在 std::numeric_limits<std::streamsize>::max()
基本上是在告诉 cin
要忽略的字符数没有限制。
此外,使用 for
循环可能更有意义。
例如:
#include <iostream>
#include <string>
int main()
{
long long int T;
std::cin >> T;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
for (int i = 0; i < T; i--)
{
std::string s;
std::getline (std::cin, s);
std::cout << s << std::endl;
}
return 0;
}
另请查看为什么您不应该使用 using namespace std;