C++ 如何避免一次输入一个字而不是一行字?
我正在读“C++初级读物plus/Stephen Prata” 这是本书的代码C++ 如何避免一次输入一个字而不是一行字?,c++,C++,我正在读“C++初级读物plus/Stephen Prata” 这是本书的代码 while (!(cin >> golf[i])) { cin.clear(); // reset input while (cin.get() != '\n') continue; // get rid of bad input cout << "Please enter a number: ";
while (!(cin >> golf[i])) {
cin.clear(); // reset input
while (cin.get() != '\n')
continue; // get rid of bad input
cout << "Please enter a number: ";
}
while(!(cin>>高尔夫[i])){
cin.clear();//重置输入
而(cin.get()!='\n')
continue;//清除错误输入
无法要在达到某个数字之前扔掉单词,请执行以下操作:
string word;
cout << "Please enter a number: ";
while(!(cin >> golf[i])){
cin.clear();
cin >> word;
if(cin.rdbuf()->in_avail() == 1){
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Please enter a number: ";
}
}
要在达到某个数字之前扔掉单词,请执行以下操作:
string word;
cout << "Please enter a number: ";
while(!(cin >> golf[i])){
cin.clear();
cin >> word;
if(cin.rdbuf()->in_avail() == 1){
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Please enter a number: ";
}
}
要在达到某个数字之前扔掉单词,请执行以下操作:
string word;
cout << "Please enter a number: ";
while(!(cin >> golf[i])){
cin.clear();
cin >> word;
if(cin.rdbuf()->in_avail() == 1){
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Please enter a number: ";
}
}
要在达到某个数字之前扔掉单词,请执行以下操作:
string word;
cout << "Please enter a number: ";
while(!(cin >> golf[i])){
cin.clear();
cin >> word;
if(cin.rdbuf()->in_avail() == 1){
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Please enter a number: ";
}
}
让我们先看看现有的代码:
while (cin.get() != '\n')
continue;
这就是读取新行的内容。我们读取一个字符,将其与新行进行比较,如果不相等,我们读取另一个字符。因此,它读取字符,当到达新行时停止读取
如果我们想改为读取空格字符,只需更改比较的值:
while (cin.get() != ' ')
continue;
如果我们想在任何空白处停止读取,我们可以使用一个函数来告诉我们字符是否为空白。该函数如下所示:
bool is_white_space(char ch) {
return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '\v';
}
但这是一项非常常见的任务,标准库已经有了一个isspace
函数,因此我们不必编写自己的函数。我们只需使用它:
while (!isspace(cin.get())
continue;
个人,我至少应该考虑把它本身变成一个函数,并赋予它一个可读的名称,比如“代码> SkIPToToWielStays,所以我们的外环看起来像:
void skip_to_space(std::istream &in) {
in.clear();
while (!isspace(in.get()))
continue;
}
// ...
while (!(cin >> golf[i])) {
skip_to_space(cin);
cout << "Please enter a number: ";
}
现在很明显,cin.get()
总是至少出现一次,并且一直持续到出现空白字符为止。让我们从查看现有代码开始:
while (cin.get() != '\n')
continue;
这就是读取新行的内容。我们读取一个字符,将其与新行进行比较,如果不相等,我们读取另一个字符。因此,它读取字符,当到达新行时停止读取
如果我们想改为读取空格字符,只需更改比较的值:
while (cin.get() != ' ')
continue;
如果我们想在任何空白处停止读取,我们可以使用一个函数来告诉我们字符是否为空白。该函数如下所示:
bool is_white_space(char ch) {
return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '\v';
}
但这是一项非常常见的任务,标准库已经有了一个isspace
函数,因此我们不必编写自己的函数。我们只需使用它:
while (!isspace(cin.get())
continue;
个人,我至少应该考虑把它本身变成一个函数,并赋予它一个可读的名称,比如“代码> SkIPToToWielStays,所以我们的外环看起来像:
void skip_to_space(std::istream &in) {
in.clear();
while (!isspace(in.get()))
continue;
}
// ...
while (!(cin >> golf[i])) {
skip_to_space(cin);
cout << "Please enter a number: ";
}
现在很明显,cin.get()
总是至少出现一次,并且一直持续到出现空白字符为止。让我们从查看现有代码开始:
while (cin.get() != '\n')
continue;
这就是读取新行的内容。我们读取一个字符,将其与新行进行比较,如果不相等,我们读取另一个字符。因此,它读取字符,当到达新行时停止读取
如果我们想改为读取空格字符,只需更改比较的值:
while (cin.get() != ' ')
continue;
如果我们想在任何空白处停止读取,我们可以使用一个函数来告诉我们字符是否为空白。该函数如下所示:
bool is_white_space(char ch) {
return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '\v';
}
但这是一项非常常见的任务,标准库已经有了一个isspace
函数,因此我们不必编写自己的函数。我们只需使用它:
while (!isspace(cin.get())
continue;
个人,我至少应该考虑把它本身变成一个函数,并赋予它一个可读的名称,比如“代码> SkIPToToWielStays,所以我们的外环看起来像:
void skip_to_space(std::istream &in) {
in.clear();
while (!isspace(in.get()))
continue;
}
// ...
while (!(cin >> golf[i])) {
skip_to_space(cin);
cout << "Please enter a number: ";
}
现在很明显,cin.get()
总是至少出现一次,并且一直持续到出现空白字符为止。让我们从查看现有代码开始:
while (cin.get() != '\n')
continue;
这就是读取新行的内容。我们读取一个字符,将其与新行进行比较,如果不相等,我们读取另一个字符。因此,它读取字符,当到达新行时停止读取
如果我们想改为读取空格字符,只需更改比较的值:
while (cin.get() != ' ')
continue;
如果我们想在任何空白处停止读取,我们可以使用一个函数来告诉我们字符是否为空白。该函数如下所示:
bool is_white_space(char ch) {
return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '\v';
}
但这是一项非常常见的任务,标准库已经有了一个isspace
函数,因此我们不必编写自己的函数。我们只需使用它:
while (!isspace(cin.get())
continue;
个人,我至少应该考虑把它本身变成一个函数,并赋予它一个可读的名称,比如“代码> SkIPToToWielStays,所以我们的外环看起来像:
void skip_to_space(std::istream &in) {
in.clear();
while (!isspace(in.get()))
continue;
}
// ...
while (!(cin >> golf[i])) {
skip_to_space(cin);
cout << "Please enter a number: ";
}
现在很明显,cin.get()
至少会发生一次,并且会一直发生,直到我们找到一个空白字符。您可能需要编辑问题的标题,使其在没有引用上下文的情况下有意义。您可能还想看一看,这样可以避免推荐本书(看看代码示例,我明白了原因!),链接到不利的评论。它建议了其他几本可能更可取的初学者书籍。谢谢。新标题可以吗?您可能希望编辑问题的标题,使其在没有引用上下文的情况下有意义。您可能还想看一看,这样可以避免推荐本书(看看代码示例,我明白了原因!),链接到不利的评论。它建议了其他几本可能更可取的初学者书籍。谢谢。新标题可以吗?您可能希望编辑问题的标题,使其在没有引用上下文的情况下有意义。您可能还想看一看,这样可以避免推荐本书(看看代码示例,我明白了原因!),链接到一个不利的评论。它建议了其他几本可能更可取的初学者书籍。谢谢。新标题可以吗?您可能希望编辑问题的标题,以便在不考虑引用上下文的情况下使其有意义。您可以