如何修改C语言逻辑语句计算器以支持字符与数字的ASCII值比较?
C语言逻辑语句计算器:支持数字与字符混合比较的修改方案
原代码仅支持纯数字的逻辑比较,要实现数字与字符的混合比较,核心是统一基于ASCII值进行判断,同时需要能识别输入的是数字还是字符。以下是具体修改方案:
关键修改点
- 改用字符串接收操作数,判断输入类型(数字/单个字符)
- 编写辅助函数将操作数转换为对应的ASCII值(数字转整数,字符取其ASCII码)
- 统一比较逻辑,输出标准的True/False
修改后的完整代码
#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> // 将输入的操作数转换为对应的比较值(ASCII值或数字本身) int get_value(char *s) { // 单个字符且不是数字,返回其ASCII值 if (strlen(s) == 1 && !isdigit(s[0])) { return (unsigned char)s[0]; } // 数字字符串,转换为整数 return atoi(s); } int main() { char op1[20], op2[20]; char operator; int val1, val2; printf("Please write your logical statement: "); // 用字符串接收两个操作数,支持数字或单个字符 scanf("%s %c %s", op1, &operator, op2); val1 = get_value(op1); val2 = get_value(op2); switch(operator) { case '>': printf(val1 > val2 ? "True" : "False"); break; case '<': printf(val1 < val2 ? "True" : "False"); break; case '=': printf(val1 == val2 ? "True" : "False"); break; default: printf("Invalid operator"); } return 0; }
代码说明
- 输入处理:用
%s格式符接收操作数,不管输入是单个字符(如a)还是数字(如23),都先存为字符串,避免原代码中%d无法识别字符的问题。 - 类型转换函数
get_value:- 若输入是单个非数字字符,直接返回其ASCII值(如
'a'返回97) - 若输入是数字字符串,通过
atoi转换为整数(如"9"返回9)
- 若输入是单个非数字字符,直接返回其ASCII值(如
- 比较逻辑:用
switch简化分支判断,通过三目运算符简洁输出结果,同时处理非法运算符的情况。 - 示例测试:
- 输入
a > 9,转换为97>9,输出True - 输入
23 < 3,转换为23<3,输出False - 输入
= = 61,'='的ASCII是61,输出True
- 输入
内容的提问来源于stack exchange,提问作者Yotam Katz
相关产品推荐
相关产品推荐

