gpt4 book ai didi

c++ - char型变量输入多个字符的效果

转载 作者:太空狗 更新时间:2023-10-29 20:30:35 28 4
gpt4 key购买 nike

我是 C++ 编码的新手。

我注意到,如果我为字符变量输入多个字符,那么下面给出的测试程序会进入无限循环。我无法正确调试此问题。有人可以帮我看看输入此类输入后程序的流程如何进行。我怀疑是否发生了一些不安全的转换。

有可能将溢出值作为下一个整数变量的输入,但我正在循环检查变量并要求用户重新输入无效值。该程序不会因为接受新的数字输入而停止。相反,它会无限打印“输入数字”。为什么 cin 不起作用接受新的输入?该程序是否有一些修改可以纠正此错误?

#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:

最佳答案

当用户在第一个查询中输入多个字符时,只有第一个字符被提取并存储在 name 中。

之后,进入循环。读取了第一个字符,它不是数字,因此流进入了错误状态。所有后续读取都失败,因此 number 的值永远不会改变,并且您有一个无限循环。

下面的程序会做你想做的事:

#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;
}
}

条件 if(!(std::cin >> number)) 检查提取是否成功。如果不是,则打印一条错误消息,清除流状态,并提取一个字符。后者是为了防止无限循环,因为如果我们从不提取坏字符,我们将一遍又一遍地得到同样的错误。

请注意,提取 std::cin >> number 将尝试提取表示数字的最长字符串。如果用户输入234t23432,那么它会提取234,因为t是第一个字符,不能被解释为数字的一部分.

关于c++ - char型变量输入多个字符的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517717/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com