c - getc(stdin) 在一种变体中不记录 '+' 和 '-',但是它接受 '*' 和 '/'

标签 c

<分区>

int main(void) {

    char z;
    while ( (z = getc(stdin)) != EOF) {
        printf("%c", z);
    }

    int  d, flag = 0;
    char c;

    while ((flag = fscanf(stdin, "%d", &d)) != EOF) {
        if (flag == 1) {
            printf("%d", d);
        } else {
            c = getc(stdin);
            printf("%c", c);
        }
    }
return 0;
}

你好,我这里有两个变体,第一个是 char z,它从输入流中获取字符并将其打印出来。它返回我输入的内容。

第二个变体准确地打印出我键入的内容,除了运算符“+”和“-”。请在这里赐教。我很困惑,因为乘法和除法在这种变体中起作用,而不是 + 和 -。下面是截图:

Screenshot of the input and output of the above code

最佳答案

scanf%d 格式说明符查找一个整数。由于一些数字前面的 +- 是数字的有效表示,因此它们被读取为该数字的一部分。

因此,当您输入 1+2 时,1 在第一个循环迭代中被拾取,然后 +2 在第二次迭代。当您随后使用 %d 打印时,默认情况下不会打印前导 +

如果您输入1-2,您将得到与输出相同的结果。然而,它不是读取 1,然后是 -,然后是 2,而是读取 1,然后是 -2- 仍然会被打印出来,因为它是相关的。

关于c - getc(stdin) 在一种变体中不记录 '+' 和 '-',但是它接受 '*' 和 '/',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578579/

相关文章:

c - 实现 Com 端口终端的最简单方法。 ( Windows ,C)

c - 为什么 C 代码在我给出 ./a.out 后会暂停?

c - 我的简单程序中的 "value is neither array nor pointer nor vector"

c - C 中的二维结构数组? (或许)

c - 为什么传递给函数的二维数组需要它的大小?

c - 打破我的钱

c程序函数图参数

c - 存储在函数静态变量之一中的函数共享的内存

c - 如何将结构 B 中的节点插入到结构 A(二叉树)

c - 如何防止在源代码中调用某些api?