为什么这个循环无限重复?
Why is this loop infinitely repeating?
这个程序的目的是计算字母数字输入中的数字。但是,我使用 循环不执行程序,除非输入是字母数字。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main(){
int input,isanum,digitcount;
printf("\nEnter a number: ");
scanf("%d",&input);
isanum=isalnum(input);
while(isanum==0){
printf("\nIncorrect input. Try again: ");
scanf("%d",&input);
isanum=isalnum(input);
}
digitcount=0;
while(input!=0){
input=input/10;
digitcount++;
}
printf("\nNumber of digits = %d",digitcount);
return 0;
}
问题出在循环上。它一直无限循环,忽略 scanf 语句,我不知道为什么。我在这里使用 isalnum()
不正确吗?
您需要检查 scanf()
的 return 值。
isalnum()
需要一个字符,但你传递的是一个整数。 '1' 与 C 中的 1 不同。
您可能每次都应该使用一整行,例如使用 fgets()
,然后检查它是否符合您想要的输入格式,例如sscanf()
.
就目前而言,您永远不会消耗任何东西,您只是一直尝试读取一个数字,但那里没有数字,所以每次都会失败。未能检查 scanf()
的 return 值是导致您没有注意到这一点的一个因素。
看看 isalnum()
是如何定义的:它需要一个 char *
。但是,您给它一个 int *
。那里的数据存储完全不同。
此外,如果您正在读取一个 int,您事先知道它将是字母数字,对吧?
这个程序的目的是计算字母数字输入中的数字。但是,我使用 循环不执行程序,除非输入是字母数字。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main(){
int input,isanum,digitcount;
printf("\nEnter a number: ");
scanf("%d",&input);
isanum=isalnum(input);
while(isanum==0){
printf("\nIncorrect input. Try again: ");
scanf("%d",&input);
isanum=isalnum(input);
}
digitcount=0;
while(input!=0){
input=input/10;
digitcount++;
}
printf("\nNumber of digits = %d",digitcount);
return 0;
}
问题出在循环上。它一直无限循环,忽略 scanf 语句,我不知道为什么。我在这里使用 isalnum()
不正确吗?
您需要检查 scanf()
的 return 值。
isalnum()
需要一个字符,但你传递的是一个整数。 '1' 与 C 中的 1 不同。
您可能每次都应该使用一整行,例如使用 fgets()
,然后检查它是否符合您想要的输入格式,例如sscanf()
.
就目前而言,您永远不会消耗任何东西,您只是一直尝试读取一个数字,但那里没有数字,所以每次都会失败。未能检查 scanf()
的 return 值是导致您没有注意到这一点的一个因素。
看看 isalnum()
是如何定义的:它需要一个 char *
。但是,您给它一个 int *
。那里的数据存储完全不同。
此外,如果您正在读取一个 int,您事先知道它将是字母数字,对吧?