C++ 如何清除cin读取的内容
键入整数并按ENTER键后,将存储换行符。C++ 如何清除cin读取的内容,c++,io,iostream,cin,flush,C++,Io,Iostream,Cin,Flush,键入整数并按ENTER键后,将存储换行符。 因此,当我执行char c=cin.get()时,先前输入的换行符被分配给变量c。因此跳过了以下循环。如何清除cin的内容?或者如何避免阅读新行 节目: char s; int T; cin >> T; // pressing ENTER here. while(T--) { s = cin.get(); // storing the previously pressed ENTER.('\n') while(s != '\n')
因此,当我执行
char c=cin.get()
时,先前输入的换行符被分配给变量c
。因此跳过了以下循环。如何清除
cin
的内容?或者如何避免阅读新行
节目:
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
s = cin.get(); // storing the previously pressed ENTER.('\n')
while(s != '\n') // does not execute.
{
.
.
.
.
.
.
}
}
忽略一个字符
std::cin.ignore(n);
忽略n
字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
std::cin.ignore(std::numeric_limits::max());
忽略所有字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
(可选)添加第二个参数以定义定界字符。默认值为EOF
忽略一个字符
std::cin.ignore(n);
忽略n
字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
std::cin.ignore(std::numeric_limits::max());
忽略所有字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
(可选)添加第二个参数以定义定界字符。默认值为EOF
忽略一个字符
std::cin.ignore(n);
忽略n
字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
std::cin.ignore(std::numeric_limits::max());
忽略所有字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
(可选)添加第二个参数以定义定界字符。默认值为EOF
忽略一个字符
std::cin.ignore(n);
忽略n
字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
std::cin.ignore(std::numeric_limits::max());
忽略所有字符
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
(可选)添加第二个参数以定义定界字符。默认值为EOF。来自@zenith的答案是正确的。除此之外,还要看看
std::cin.peek()
下面是一些代码:
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
while(std::isspace(cin.peek())) // peek used here
cin.ignore(); // ignore spaces, tabs and enter
@zenith的答案是正确的。除此之外,还要看看
std::cin.peek()
下面是一些代码:
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
while(std::isspace(cin.peek())) // peek used here
cin.ignore(); // ignore spaces, tabs and enter
@zenith的答案是正确的。除此之外,还要看看
std::cin.peek()
下面是一些代码:
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
while(std::isspace(cin.peek())) // peek used here
cin.ignore(); // ignore spaces, tabs and enter
@zenith的答案是正确的。除此之外,还要看看
std::cin.peek()
下面是一些代码:
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
while(std::isspace(cin.peek())) // peek used here
cin.ignore(); // ignore spaces, tabs and enter
你有几个选择 您只需调用
cin.getline()
,它将检索包括换行符在内的行的其余部分,并将指针保留在下一行的开头。只要知道输入行的其余部分是可忽略的,就可以工作
如果知道下一行是换行符,也可以使用cin.ignore(1)
或cin.ignore(2)
。对于产生CR+LF而不是一个的输入流,您必须忽略两个字符,这取决于您是否得到CR或CR+LF
另一个选项是用于提前检查下一个字符。这样,您就可以使用跳过换行符而不使用非换行符。例如:
void skipNewlines (istream &in) {
int ch;
while ((ch = in.peek()) == '\r' || ch == '\n')
in.ignore();
// and now newlines skipped and next in.get() will read the next char.
}
int getWithoutNewline (istream &in) {
int ch;
do {
ch = in.get();
} while (ch == '\n' || ch == '\r');
return ch;
}
您可以修改它以跳过所有空白。使用cin>>T
时,该选项可能最顺畅
<>你也可以考虑编写自己的字符输入函数,读取下一个字符,但忽略断线(或其他)。例如:
void skipNewlines (istream &in) {
int ch;
while ((ch = in.peek()) == '\r' || ch == '\n')
in.ignore();
// and now newlines skipped and next in.get() will read the next char.
}
int getWithoutNewline (istream &in) {
int ch;
do {
ch = in.get();
} while (ch == '\n' || ch == '\r');
return ch;
}
然后使用getWithoutNewline(cin)
而不是cin.get()
在解析整数时读取字符。你有灵活性;例如,您可以将换行符转换为空格。这样做的好处是,无需知道任何断线的位置或形式,即可进行操作。但是,它可能不适用于所有情况
就我个人而言,我不会采取盲目丢弃所有内容的做法。我甚至不确定这是否可靠,因为每行之后都没有文件结尾。就这一点而言,与您所要求的最接近的方法是调用getline()
读取并使用该行的其余部分(包括换行符)
选择其中最适合您的应用程序和用法的一个或其中的某个变体。您有一些选择 您只需调用
cin.getline()
,它将检索包括换行符在内的行的其余部分,并将指针保留在下一行的开头。只要知道输入行的其余部分是可忽略的,就可以工作
如果知道下一行是换行符,也可以使用cin.ignore(1)
或cin.ignore(2)
。对于产生CR+LF而不是一个的输入流,您必须忽略两个字符,这取决于您是否得到CR或CR+LF
另一个选项是用于提前检查下一个字符。这样,您就可以使用跳过换行符而不使用非换行符。例如:
void skipNewlines (istream &in) {
int ch;
while ((ch = in.peek()) == '\r' || ch == '\n')
in.ignore();
// and now newlines skipped and next in.get() will read the next char.
}
int getWithoutNewline (istream &in) {
int ch;
do {
ch = in.get();
} while (ch == '\n' || ch == '\r');
return ch;
}
您可以修改它以跳过所有空白。使用cin>>T
时,该选项可能最顺畅
<>你也可以考虑编写自己的字符输入函数,读取下一个字符,但忽略断线(或其他)。例如:
void skipNewlines (istream &in) {
int ch;
while ((ch = in.peek()) == '\r' || ch == '\n')
in.ignore();
// and now newlines skipped and next in.get() will read the next char.
}
int getWithoutNewline (istream &in) {
int ch;
do {
ch = in.get();
} while (ch == '\n' || ch == '\r');
return ch;
}
然后使用getWithoutNewline(cin)
而不是cin.get()
在解析整数时读取字符。你有灵活性;例如,您可以将换行符转换为空格。这样做的好处是,无需知道任何断线的位置或形式,即可进行操作。但是,它可能不适用于所有情况
就我个人而言,我不会采取盲目丢弃所有内容的做法。我甚至不确定这是否可靠,因为每行之后都没有文件结尾。就这一点而言,与您所要求的最接近的方法是调用getline()
读取并使用该行的其余部分(包括换行符)
选择其中最适合您的应用程序和用法的一个或其中的某个变体。您有一些选择 您只需调用
cin.getline()
,它将检索包括换行符在内的行的其余部分,并将指针保留在下一行的开头。只要知道inpu的其余部分,就可以工作