c - C语言,如何检查给定的输入是字符还是正整数
问题描述
我想知道如何在这种情况下继续从键盘输入:如果给定的输入是正数,它会继续使用代码如果给定的输入是负数或字母,它必须打印“插入正数"然后再次询问另一个输入,直到它有正确的输入。关于消极和积极的输入,我写的代码效果很好,但是当我写信时它会出错。我尝试的检查如下
chk=isalpha(n);
while(!chk || n<0)
{
printf("Inserire un intero positivo \n");
scanf("%d", &n);
chk=isalpha(n);
}
printf("%d\n%d\n", t1, t2);
在这种情况下,如果我输入一个负数,它会正常工作,但如果我输入一个字母,printf 就会循环。我也尝试过while(isalpha(n) || n<0)
还有一堆其他的代码,我会为你跳过。请帮我解决这个问题
解决方案
您可以检查返回值scanf
是否char
返回 0,以及您需要清除缓冲区以停止scanf
使用相同的字符。
例子:
int ret = 0;
do
{
char c;
while ((c = getchar()) != '\n' && c != EOF) { } /* to clear the bad characters*/
printf("Inserire un intero positivo \n");
ret = scanf("%d", &n);
}while(!ret || n<0);
推荐阅读
- powershell - 在powershell中传递感叹号,括号作为可执行参数的一部分
- python - 通过生成器从 fastq 获取数据
- python - 检查两个“时间范围”是否相互重叠
- android - jitpack build failed with info: No build artifacts found
- python - 通过 TCP 套接字发送的摄像头馈送有时会卡住
- php - multiphp php.ini 没有效果
- .net - ASPNETCORE_ENVIRONMENT 设置为“开发”以某种方式限制 API 调用
- php - SoapFault:看起来我们没有 XML 文档 Magento 和 laravel
- installation - Visual Studio 2017 - 通过网络共享和 Ansible Playbook 创建离线安装
- notepad++ - 使用记事本++从文件中的一组行中选择字符范围