我今天早些时候制作了一个小型 C 计算器,我注意到当它能够执行的唯一运算是加法时它工作正常,但是当我尝试添加减法、乘法或除法时,它根本就不会给出输出,我不知道原因,因为我之前制作的另一个计算器(虽然简单得多)能够很好地完成类似的过程。

不过,我对 C 和编程还很陌生(C 是我刚刚学习的第一种编程语言)所以这可能只是我的错。

这是目前我的程序上的代码:

int main()
{
    int x;
    int y;
    int z;
    char c;
    printf("Number calculator advanced\n");
    printf("please enter 2 digits\n");
    scanf("%d%c%d",&x,&c,&y);
    if (c == '+')
    {
        z = x += y;
        printf("%d\n",z);
    }
    if (c == '-')
    {
        z = x -= y;
        printf("%d\n",z);
    }
}

如你所知,我期望它扫描用户的数学方程式,并且当使用“ – ”或“ +”时,它会减去或添加两个数字,就像当它是唯一使用的“if”语句时它对加法所做的那样。我最终得到的结果是:

Number calculator advanced
please insert 2 digits
[example input:]
5 + 2

Process returned 0 (0x0)   execution time: 19.943 s
press ENTER to continue

11

  • 2
    您正在输入5 + 2,共五个字符(您必须考虑空格)。请尝试输入5+2


    – 

  • 2
    z = x += y;用你自己的话来说,代码中说的一步一步,你认为这是什么意思?你预计哪些变量会因此而改变,以及如何改变?


    – 

  • 1
    @Schwern 除了其他许多问题之外,输出insert还在代码中用到了单词enter


    – 

  • 1
    类似:


    – 


  • 1
    这个问题可重现,并非由拼写错误引起。它不应该被关闭。


    – 


最佳答案
2

节省时间,检查一下的返回值scanf("%d%c%d",&x,&c,&y);。是 3 吗?

代码如下:

if (scanf("%d%c%d", &x, &c, &y) != 3) { 
  // Do something to alert.
  printf("Oops\n");
  exit(1);
}

OP 很快就会缩小问题范围。

最好检查scanf()返回代码。

恕我直言,这是导致类似问题的关键问题。if (scanf("%d %c%d", &x, &c, &y)!=3) {

问题在于您如何使用 scanf。它没有考虑到可能存在空格。

"%d%c%d"匹配一个整数、一个字符和一个整数,且第一个整数和字符之间没有空格

"%d %c %d"匹配一个整数、0 个或多个空格、一个字符、0 个或多个空格和一个整数。

来自……

空格字符:格式字符串中的任何单个空格字符都会占用输入中所有可用的连续空格字符(通过在循环中调用 isspace 来确定)。请注意,格式字符串中的“\n”、“”、“\t\t”或其他空格之间没有区别。

12

  • 如果您认为问题是“我如何允许scanf读取空格?”那么 a) 问题应该这么说;b) 这肯定是重复的。请阅读 以及我提供的其他链接,并注意在 Stack Overflow 上回答问题的目的不是解决 OP 的问题


    – 


  • @KarlKnechtel 我来这里是为了帮助人们编码。


    – 

  • 3
    @KarlKnechtel SO 的目标是帮助人们。更好的问题会得到更好的帮助。我们也不想因为太多要求而赶走新用户。在回答人们的问题的同时,帮助他们提出更好的问题是可以的。这样他们就有可能留下来并不断进步。而且,就我个人而言,努力帮助人们却因为有人没有遵守协议而被否决和责备,这真的很令人沮丧。


    – 

  • 3
    @Schwern 谢谢你的帮助,我过去几天一直在学习 C 语言,据我所记得,我所用的书中没有提到这一点。


    – 

  • 2
    嗯:"%d %c %d"匹配(0 个或多个空格和一个整数)、0 个或多个空格、(一个字符)、0 个或多个空格以及(0 个或多个空格和一个整数)基本相同"%d %c%d"


    –