C 当检查变量是否为数字时,循环无限循环
我对编程相当陌生,所以这个问题的答案可能很简单,但我找不到。当检查变量是否大于1000或小于1时,程序工作,但每当我输入一个字母时,程序就无限循环。无论如何,这是代码,谢谢你的帮助:C 当检查变量是否为数字时,循环无限循环,c,C,我对编程相当陌生,所以这个问题的答案可能很简单,但我找不到。当检查变量是否大于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 dif
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;
}
scanf的返回值是多少?这些函数有返回值是有原因的,而您刚刚了解了一个原因。不做你想做的事。阅读文档。你认为isdigit3的回报是什么?好吧,这看起来比我的xD要复杂一点,但是谢谢你的帮助,我会努力了解这里面发生了什么,这将是一次学习的经历lol@N.DuToit这是函数使用的一个很好的例子,您的主程序要简单得多,因为GetNumber处理所有检查用户是否输入了数字或字母的操作。还将接受诸如124Hello之类的输入,并提取数字124,其余的则丢弃。可以通过稍微修改strtol来完善+1@DeiDei是的,这就是为什么我写的还有改进的余地
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;
}