为char类型变量输入多个字符的效果 我对C++编码是新的。
我注意到,如果我为一个字符变量输入多个字符,那么下面给出的测试程序将进入一个无限循环。我无法正确调试此问题。有人能帮我看看当输入这样的信息时程序的流程是怎样的吗。我怀疑会发生一些不安全的转换 溢出值有可能作为下一个整数变量的输入,但我正在检查循环中的变量,并要求用户 重新输入的值无效。程序不会因获取新的数字输入而停止。相反,它无限打印“输入一个数字”。为什么cin不为其工作 接受新的输入?此程序中是否有一些修改可以纠正此错误为char类型变量输入多个字符的效果 我对C++编码是新的。,c++,C++,我注意到,如果我为一个字符变量输入多个字符,那么下面给出的测试程序将进入一个无限循环。我无法正确调试此问题。有人能帮我看看当输入这样的信息时程序的流程是怎样的吗。我怀疑会发生一些不安全的转换 溢出值有可能作为下一个整数变量的输入,但我正在检查循环中的变量,并要求用户 重新输入的值无效。程序不会因获取新的数字输入而停止。相反,它无限打印“输入一个数字”。为什么cin不为其工作 接受新的输入?此程序中是否有一些修改可以纠正此错误 #include <iostream> int main
#include <iostream>
int main()
{
char name;
int number=-1;
cout << "Enter a character: \n";
cin >> name; //Use input like abc here
cout << "number = " << number;
while (number == -1)
{
cout << "Enter a number: \n";
cin >> number; // This never waits for user input
}
return 0;
}
Output
Enter a character:
ytc
number = -1Enter a number:
Enter a number:
Enter a number:
#包括
int main()
{
字符名;
整数=-1;
cout>name;//在此处使用类似abc的输入
cout当用户在第一次查询中输入多个字符时,只有第一个字符被提取并存储在name
中
然后,进入循环。读取第一个字符,它不是一个数字,因此流进入错误状态。所有后续读取都失败,因此数字
的值永远不会更改,并且您有一个无限循环
以下程序将执行您想要的操作:
#include <iostream>
int main() {
char name = '\0';
int number = -1;
std::cout << "Enter a character: " << std::endl;
std::cin >> name;
std::cout << "You entered " << name << std::endl;
while(number == -1) {
std::cout << "Enter a number: " << std::endl;
if(!(std::cin >> number)) {
if(std::cin.eof()) {
std::cout << "User pressed CRTL+d" << std::endl;
break;
}
std::cout << "This was not a valid number - try again: " << std::endl;
std::cin.clear();
std::cin.get(); // extract one character
}
else
std::cout << "You entered " << number << std::endl;
}
}
#包括
int main(){
字符名='\0';
整数=-1;
std::cout名称;
std::cout没有保证清除输入流的方法。您可以编写代码来清除输入流,但无法保证它能正常工作。因为在标准C/C++中,输入流是缓冲的。按键是由操作系统而不是程序缓冲的。您可以递归调用cin.get()以确保缓冲区中的所有数据都已使用。请参阅下面的代码段
char name = 0;
int number = -1;
std::cout << "Enter a character: " << std::endl;
std::cin >> name;
std::cout << "You entered " << name << std::endl;
// Clear the stream
while( !std::cin.eof() && std::cin.get() != '\n' );
std::cout << "Enter a number: " << std::endl;
std::cin >> number;
return 0;
charname=0;
整数=-1;
std::cout名称;
标准::cout