本地测试全正常,洛谷全wa

P1957 口算练习题

你应该在洛谷的[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


|