区分C中的字母和整数

请注意,我不是要像ctype.h中的isalpha()这样的函数来区分单个数字和字母(或其他字符)。

我试图区分整数和字母表。

问题是字母表也被视为C中的整数,我想不出办法。

例如:如果输入是字母a,则它与’a’相同,即整数97。

我需要找出输入是’a’还是97。

我试图这样做,并意识到它根本无法工作。

int a; scanf("%d", &a); if( (a>='A' && a='a' && a<='z') ) { printf("\nAlphabet"); } 

检查scanf()的返回值

 int val; int chk = sscanf("a", "%d", &val); if (chk == 1) /* all ok */; if (chk == 0) /* no assignments */; if (chk == EOF) /* error */; 

要么

 int val; int chk = sscanf("97", "%d", &val); if (chk == 1) /* all ok */; if (chk == 0) /* no assignments */; if (chk == EOF) /* error */; 

要么

 int val1, val2, val3; int chk = sscanf("97 b 99", "%d%d%d", &val1, &val2, &val3); if (chk == 3) /* all ok */; if (chk == 2) /* only val1 and val2 were assigned a value */; if (chk == 1) /* only val1 was assigned a value */; if (chk == 0) /* no assignments */; if (chk == EOF) /* error */; 

你不必在scanf之后区分它,因为它已经区分了它:

  • %d只输入整数,所以你只需输入integer =>如果你写9,你将在变量中存储9。 你不能用这个( 演示 )读取角色。 此外,如果您输入97,它将存储97内部变量,这也对应于与a关联的代码
  • %c只输入字符=>如果你写9,你将存储字符9的相关代码, 57

您可以检查scanf返回,以了解它是否成功读取。

因此,如果用户可以同时输入字符和字母,则可能的解决方案是仅获取带有%c字符并在键入用户期间重新创建整数:

 int i = 0; int dec = 1; char c; scanf("%c", &c); if (c >= '0' && c <= '9') { i += c*dec; dec *= 10; } else { // manage letter }