c - 如果用户输入了非整数,如何重新请求用户输入
问题描述
如何不断重新要求用户输入有效的整数输入?我知道如何验证整数范围输入,但是当提示在 C 中输入整数时,我不知道如何验证非整数输入。
#include <stdio.h>
int main() {
int menu;
while(true) {
printf("Choose a menu (1-4):\n");
do {
scanf("%d", &menu);
} while(menu < 1 || menu > 4);
if(menu == 1) {
printf("menu 1\n");
} else if(menu == 2) {
printf("menu 2\n");
} else if(menu == 3) {
printf("menu 3\n");
} else if(menu == 4) {
printf("menu 4, exit\n");
break;
}
}
return 0;
}
任何帮助将不胜感激,如果这是重复的,我很抱歉,因为每次我尝试搜索解决方案时,它使用另一种语言,或者线程询问“如何验证整数输入范围”而不是非整数输入。
解决方案
如果您想知道用户何时给出了非整数输入,一种方法如下:
char number; /* assuming you'll only need numbers 0-9 */
int menu;
while (true)
{
scanf("%c",&number);
if (number >= '0' && number <= '9')
break;
else
printf("The input is not an integer\n");
}
menu = number - '0' ;
/* write rest of the code here */
如果输入是 1 - 999,你可以使用这个:
char *s = malloc(sizeof(char)*4);
while (true)
{
scanf("%s", s);
is_int = true;
menu = 0;
if (s[3] != '\0')
{
printf("integer bigger than 999 not allowed, input again\n");
continue;
}
for (int itr = 0; s[itr] != '\0'; itr++)
if (s[itr] >= '0' && s[itr] <= '9')
{
menu = menu*10 + s[itr]-'0';
}
else
{
is_int = false;
printf("not a valid integer, input again\n");
break;
}
if (is_int && menu != 0)
break;
}
推荐阅读
- ms-access - 在 ms 中访问如何以编程方式将查询导出到文本文件
- sql-server - 如何在 SQL Server 中的字符串中查找整数值
- python-3.x - 在 Python 中随时间序列数据移动具有高斯形状的窗口
- fullpage.js - Fullpage.js - 移动设备上的锚点在滚动时不会回到该部分的顶部
- spring - 在 repo.spring.io 端点遇到间歇性问题
- javascript - 我似乎无法使“getElementsByID”正常工作,始终返回“未捕获的类型错误:无法读取未定义的属性。”
- jquery - jQuery Sortable 获取新的父 ID?
- c++ - 已创建 GitHub 存储库但无法上传 VS 解决方案
- php - WordPress分页问题,仅显示第一页
- git - 我正在尝试推动heroku master,我得到: Build timed out while waiting to start