繁体   English   中英

C中字母和整数的区别

[英]Distinguish between a letter and integer in C

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

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

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

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

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

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

int a;
scanf("%d", &a);
if( (a>='A' && a<='Z') || (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只输入整数,所以你可以输入整数 => 如果你写 9,你将把 9 存储在变量中。 不能用这个( demo )读取字符。 此外,如果您输入 97,它将在变量中存储 97,该变量也对应于与关联的代码
  • %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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM