c -检测输入是字符或数字



我正在写一个程序来计算2个变量的和。其中一个是从1到10的数字,另一个是字母表中的一个字母(大写),其值与其顺序相对应。只能输入数字,只能输入字母,或者两者兼而有之。

例如:

输入>
10  7     
C  8
E  D
9  F

17
11
9
15

这是我的代码(这个问题应该在codereview上发布,但由于某种原因,我不能在codereview上正确格式化代码。请原谅我)。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){     
char a[3], b[3];                        
int m,n;
//these variables hold the value of grade after converted  

scanf("%s%s", a, b);
if (a[1]!='')         
{
//this is because only number 10 has 2 digits    
m=10;
}
else if (a[0]>=49 && a[0]<=57)
{
m=a[0]-48;      //in ascii table, 49 stands of 1 and 57 stands for 9
}
else
{
m=a[0]-64;      //in ascii table, 65 stands for 'A'
}
if (b[1]!='')              
{
n=10;
}
else if (b[0]>=49 && b[0]<=57)      
{
n=b[0]-48;
}
else         
{
n=b[0]-64;
}
printf("%d", m+n);
return 0;
}

它可以工作,但我认为它有点复杂。所以我想问一下,是否有什么方法可以优化检测。

以及如何处理大的输入数。

如有任何帮助,不胜感激。

可以使用stroll函数将字符串转换为long long。它看起来更干净,这个程序可以处理从-92233720368547758089223372036854775807作为输出。

#include <stdio.h>
#include <stdlib.h>
int main(void) {
char string_num1[20], string_num2[20];
scanf("%s%s", string_num1, string_num2);
long long num1 = strtoll(string_num1, NULL, 10);
long long num2 = strtoll(string_num2, NULL, 10);
long long num3 = num1 + num2;
printf("%lld", num3);
return 0;
}

相关内容

  • 没有找到相关文章

最新更新