为什么这个循环无限重复?

时间:2015-03-05 07:23:23

标签: c while-loop infinite-loop

此程序的目的是计算字母数字输入中的数字。但是,我使用循环来执行程序,除非输入是字母数字

这是代码:

#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()吗?

2 个答案:

答案 0 :(得分:1)

您需要检查scanf()的返回值。

isalnum()接受一个字符,但是你传递一个int。 “1”与C中的1不同。

每次你可能应该消耗整行,例如使用fgets(),然后检查它是否符合您所需的输入格式,例如与sscanf()

就目前而言,你从不消费任何东西,你只是继续尝试读取一个数字,但没有一个存在,所以它每次都失败。未能检查scanf()的返回值是导致您不注意这一点的因素。

答案 1 :(得分:0)

查看isalnum()的定义方式:它需要char *。但是,你给它一个int *。数据存储完全不同。

此外,如果您正在阅读int,您事先知道它将是字母数字,对吗?

相关问题