计算器应接受如下输入(23〉3)或(a〉9),并打印出它的真假。我的主要困难是对字母做这个。我只对数字做了这个。我不知道如何定义scanf
来接受字母。当一个字母与一个数字比较时,我需要比较字母的ASCII值。所以,如果我执行a>9
,它实际上会检查97>9
(97是'a'的ASCII值)。
#include <stdio.h>
int main() {
int num1, num2;
char operator;
printf("Please write your logical statement:");
scanf("%d %c %d", &num1, &operator, &num2);
if (operator=='>')
{
if (num1>num2)
{
printf("True");
}
else
{
printf("false");
}
}
else if (operator =='<')
{
if (num1<num2)
{
printf("True");
}
else
{
printf("false");
}
}
else if (operator == '=')
{
if (num1==num2)
{
printf("True");
}
else
{
printf("False");
}
}
}
如何修改它以同时接受字符?
2条答案
按热度按时间x4shl7ld1#
有很多方法可以做到这一点。一个相当直接的方法是将两个操作数读为 strings,然后使用一个函数将这些字符串转换为它们的组成部分编号,或者返回(单个)字符的(ASCII)值。
下面是这样一个函数,以及使用它的
main
的修改版本:%9s[a-zA-Z0-9]
说明符(this cppreference page中描述的“set”格式)的简短说明:这允许从三个范围('a'到'z','A'到'Z'和'0'到'9')中的任何字符作为输入到相应的char[]
参数。因此,当看到您的一个运算符时,输入(到第一个字段)将停止。紧跟在'%'后面的'9'将两个字段的输入限制为9个字符,从而防止缓冲区溢出;如果您更改了in1
和in2
数组的大小,则相应地更改该值(它不应大于数组大小的 * 减一 *,以允许使用nul
-终止符)。请注意,我还添加了一些(可能的)改进:
1.始终检查
scanf
返回的值,以确保它成功1.您可以使用“条件(三元)运算符”使输出代码(
printf
块)更加简洁。ruoxqz4g2#
你可以做的一件事就是
但是这仅在用户输入单个数字而不是诸如
23
的多位数字时才起作用。通常建议不要使用函数
scanf
,而是一次读取一整行输入,包括换行符。函数scanf
可能会做一些不好的事情,比如在输入流中留下换行符which can cause trouble。为了一次读取整行输入,我建议使用函数
fgets
。我建议你把所有字符当作一个单独的字符串,但不包括操作符字符。然后你可以通过函数
strtol
来判断这个字符串是否是一个有效的整数。如果不是,你可以检查字符串的长度,以验证它是否只是一个字符。如果两者都不是,那么你的程序应该打印一个错误消息并退出。以下是一个示例:
此程序具有以下行为:
第一个