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

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,您事先知道它将是字母数字,对吧?