如何避免int变量的char输入
How Can I avoid char input for an int variable?
下面的程序显示了正在输入和输出的'int'值。然而,当我输入一个字符时,它会进入一个无限循环,显示上一个输入的"int"值。如何避免输入字符?
#include<iostream>
using namespace std;
int main(){
int n;
while(n!=0){
cin>>n;
cout<<n<<endl;
}
return 0;
}
无限循环的原因:
cin进入失败状态,这使得它忽略对它的进一步调用,直到错误标志和缓冲区被重置。
cin.clear();
cin.ignore(100, 'n'); //100 --> asks cin to discard 100 characters from the input stream.
检查输入是否为数字:
在代码中,即使是非int类型也会被强制转换为int。如果不将输入放入char数组并对每个数字调用isdigit()
函数,就无法检查输入是否为数字。
函数isdigit()可用于区分数字和字母。此函数存在于<cctype>
标头中。
is_int()函数如下所示。
for(int i=0; char[i]!=' ';i++){
if(!isdigit(str[i]))
return false;
}
return true;
如果您想使用用户定义函数,可以使用ascii/ansi值来限制字符输入。
48-57是0到9个值的范围
#include <iostream>
#include <climits> // for INT_MAX limits
using namespace std;
int main()
{
int num;
cout << "Enter a number.n";
cin >> num;
// input validation
while (cin.fail())
{
cin.clear(); // clear input buffer to restore cin to a usable state
cin.ignore(INT_MAX, 'n'); // ignore last input
cout << "You can only enter numbers.n";
cout << "Enter a number.n";
cin >> num;
}
}
您需要检查cin失败
和
您需要清除输入流
请参见以下示例。它在最近的编译器中进行了测试
#include <iostream>
using namespace std;
void ignoreLine()
{
cin.clear();
cin.ignore();
}
int main(int argc, char const* argv[])
{
int num;
cout << "please enter a integer" << endl;
cin >> num;
while (cin.fail()) {
ignoreLine();
cout << "please enter a integer" << endl;
cin >> num;
}
cout << "entered num is - " << num << endl;
return 0;
}
相关文章:
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 为什么当我尝试将char输入到int时,文件指针会卡住
- 程序的执行在 C++ 中输入 char 变量后结束
- 如果用户输入的输入大于 char 数组,则 cin.getline 会跳过输入提醒
- 当我将 char 数组发送到输入参数为字符串的函数时会发生什么?
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 如何使用CIN将输入整数值获取到char类型变量中
- 输入重定向读取整数和char C
- C 读取输入,直到线char数组的结束
- std::cin 无法将命令行中的用户输入传递给具有 char 类型的变量吗?
- 接受类型char的输入的问题
- 将用户输入从int []转换为char [] []
- 使用RegQueryValueEx将reg_sz作为输入并将其用作char数组
- 如何防止char输入影响int变量
- 如何避免int变量的char输入
- 为什么这段代码不会使 cin 崩溃?char 输入了一个整数变量 C++
- 单链表,基于 *char 输入的自排序
- 获取char输入,检查它是否有效,如果无效,清除整个输入
- C/ c++读取未知长度的char*输入