四则运算运算器(AI不会)
错误代码
#include <stdio.h>
int main()
{
char s[30];
int i;
int sum=s[0]-'0';
for(i=1;s[i]!='\0';i=i+2)
{
switch(s[i])
{
case'+':
sum=sum+s[i+1]-'0';
break;
case'-':
sum=sum-s[i+1]-'0';
break;
case'*':
sum=sum*s[i+1]-'0';
break;
case'/':
if(s[i+1]!=0)
{
sum=sum/s[i+1]-'0';
break;
}
}
}
printf("%d",sum);
}
正确代码
#include <stdio.h>
#include <ctype.h> // 包含isdigit函数
int main() {
char expression[1000]; // 假设表达式不会超过1000个字符
int i = 0;
char ch;
// 读取整个表达式,直到遇到 '='
while ((ch = getchar()) != '=') {
if (i < sizeof(expression) - 1) { // 防止缓冲区溢出
expression[i++] = ch;
}
}
expression[i] = '\0'; // 字符串结束符
int result = 0; // 存储计算结果
int current_num = 0; // 存储当前读取到的数字
char operator = '+'; // 初始操作符设为 '+', 这样第一个数会被加到结果中
int len = 0;
// 计算表达式的长度
while(expression[len] != '\0') len++;
i = 0;
while (i < len) {
// 跳过空格(虽然题目说没有空格,但为了健壮性可以加上)
while (i < len && expression[i] == ' ') {
i++;
}
// 读取数字
current_num = 0;
int num_start = 0; // 标记是否开始读取数字
while (i < len && isdigit(expression[i])) {
num_start = 1;
current_num = current_num * 10 + (expression[i] - '0');
i++;
}
// 如果没有读取到数字(例如表达式以运算符开头或结尾),则报错
if (!num_start) {
printf("ERROR\n");
return 0;
}
// 执行上一个操作符对应的运算
if (operator == '+') {
result += current_num;
} else if (operator == '-') {
result -= current_num;
} else if (operator == '*') {
result *= current_num;
} else if (operator == '/') {
if (current_num == 0) {
printf("ERROR\n");
return 0; // 除法分母为0
}
result /= current_num;
} else {
printf("ERROR\n"); // 理论上不会到达这里,因为operator在循环中被更新
return 0;
}
// 跳过数字后面的空格
while (i < len && expression[i] == ' ') {
i++;
}
// 读取下一个操作符
if (i < len) {
operator = expression[i];
// 检查是否为合法的操作符
if (operator != '+' && operator != '-' && operator != '*' && operator != '/') {
printf("ERROR\n");
return 0; // 非法运算符
}
i++; // 移动到下一个字符
}
}
// 输出结果
printf("%d\n", result);
return 0;
}
CVTE公司福利 715人发布

