区分C中的字母和整数

时间:2016-08-24 09:08:17

标签: c char

请注意,我不是要像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");
}

2 个答案:

答案 0 :(得分:2)

检查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 */;

答案 1 :(得分:1)

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

  • %d只输入整数,因此您只需输入integer =&gt;如果你写9,你将在变量中存储9。您无法读取此字符(demo)。此外,如果输入97,它将在变量中存储97,这也对应于与
  • 相关联的代码
  • %c仅输入字符=&gt;如果你写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
}