此程序的目的是计算字母数字输入中的数字。但是,我使用循环来执行程序,除非输入是字母数字。
这是代码:
#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()
吗?
答案 0 :(得分:1)
您需要检查scanf()
的返回值。
isalnum()
接受一个字符,但是你传递一个int。 “1”与C中的1不同。
每次你可能应该消耗整行,例如使用fgets()
,然后检查它是否符合您所需的输入格式,例如与sscanf()
。
就目前而言,你从不消费任何东西,你只是继续尝试读取一个数字,但没有一个存在,所以它每次都失败。未能检查scanf()
的返回值是导致您不注意这一点的因素。
答案 1 :(得分:0)
查看isalnum()
的定义方式:它需要char *
。但是,你给它一个int *
。数据存储完全不同。
此外,如果您正在阅读int,您事先知道它将是字母数字,对吗?