c - 检查变量是否为数字时,while循环无限循环
问题描述
我对编程很陌生,所以对这个问题的回答可能很简单,但我找不到。当检查变量是超过 1000 还是低于 1 时,程序可以工作,但是每当我输入一个字母时,程序就会无限循环。无论如何,这是代码,感谢您的帮助:
printf("Player 1 enter A number between 1 and 1000: ");
scanf("%d", &num);
while(num<1 || num>1000 || !isdigit(num)){
printf("please enter different number: ");
scanf("%d", &num);
}
解决方案
scanf
是读取用户输入的糟糕选择。
你可能想要这个:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
// Get a number from the user
// number: pointer to the number
// return value: 1 if the user has typed a number
// 0 if the user ha not typed a number
int GetNumber(int *number)
{
char inputbuffer[20];
fgets(inputbuffer, sizeof inputbuffer, stdin); // read raw line from user
if (!isdigit(inputbuffer[0])) // if first char isn't a digit
return 0; // it's not a number, return 0
*number = strtol(inputbuffer, NULL, 10); // convert to number
return 1;
}
int main()
{
int num;
printf("Player 1 enter A number between 1 and 1000: ");
while (!GetNumber(&num) || num < 1 || num > 1000) {
printf("please enter different number: ");
}
printf("number = %d\n", num);
return 0;
}
替代版本GetNumber
:
int GetNumber(int *number)
{
char inputbuffer[20];
fgets(inputbuffer, sizeof inputbuffer, stdin);
char *endptr;
*number = strtol(inputbuffer, &endptr, 10);
if (*endptr != '\n') // if user input ends with somethign else than
return 0; // \n it's not a number (e.g: "123a")
return 1;
}
推荐阅读
- sql - 选择位置:分类及其子项
- python - 如何使用 Flask-SQL Alchemy 在 JSON 中显示约束错误?
- c# - 通过 EF Core 和 NetTopologySuite 使用半径按区域搜索
- node.js - Passport.js 谷歌登录由中间件重定向
- android - 重新安装应用程序后访问 Android 外部存储中的图像
- javascript - Mongoose 子架构(子文档)正在返回未定义的值
- python - tkinter:调整标签文本
- javascript - 创建银行客户计划
- python - 查找特定单词后一行的所有数字
- google-analytics - 谷歌分析总是为访问的每个页面启动新会话