你应该在洛谷的[IDE](https://www.luogu.com.cn/ide)上试试QAQ
@[snemc](/user/716517)
by WZRYWZWY @ 2022-11-29 12:12:58
```c
#include <stdio.h>
int i,x,y;
char fh;
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int main()
{
int (*arr[3])(int, int) = {add, sub, mul}; // 定义一个函数指针数组
char brr[3] = {'+', '-', '*'}; // 定义一个字符数组
int (*p)(int, int) = arr[0]; // 定义一个可以变化的函数指针
int i; // 读入i,
scanf("%d", &i);
char fh,c; // 记录符号,和符号字符
// p = arr[fh - 'a'];
// char c = brr[fh - 'a'];
while(i--){
scanf(" %c", &fh); // 读取一个符号,有可能是一个数字,或者一个符号
if(fh == 'a' || fh == 'b' || fh == 'c'){ // 如果是符号
p = arr[fh - 'a'];
c = brr[fh - 'a']; // 更新 函数指针和 符号
scanf("%d%d", &x, &y); // 更新,x,y的值
}else{ // 读入一个符号不是符号
int t = (int)(fh - '0'); // 获取这个数字的值
scanf("%d%d", &x, &y); // 更新x,y ,x需要单独处理
int m = x; // 让m替换x,处理m,需要保留x的值
while(m){
t *= 10;
m /= 10;
}
x = x + t; // 获取x真正的值
}
int k = printf("%d%c%d=%d\n", x, c, y, p(x, y)); // k记录打印的字符数,printf额外的功能
printf("%d\n", k - 1);// 会多记录一个换行符号,去掉
}
return 0;
}
```
改成这样可以获得90分 [提交记录](https://www.luogu.com.cn/record/96028095)
具体来说就是在`scanf`的`%c`前面添加` `(空格)来自动忽略空格换行之类的不可见字符.
问题可能出在 在 windows 下 换行是 `\r\n` 是两个字符,.
剩下的问题就是对于第31-36行 读入的 $x$ 有可能是存在前导零的,但是很明显程序会忽略前导$0$
by Jorylee @ 2022-11-29 12:20:40