';如果';条件在我的C代码中未按预期工作

';如果';条件在我的C代码中未按预期工作,c,visual-studio,gets,C,Visual Studio,Gets,我完全知道这是因为我在用C编写基于文本的计算器项目时忽略了一些错误,但我不到一周前才开始学习C,所以请帮助我 因为整个代码是119行,所以我将只在真正的问题所在的地方发布必要的代码片段:(编译期间没有错误,因此除了这些行之外没有错误) 错误在于,即使在完美地输入CALCULATE、Factorse或AVERAGE之后,如果输入无效(即,如果没有输入这3个输入),我仍然会收到我编程的错误消息。它应该继续问我希望操作的第一个数字,就像为计算输入编写的一样 代码运行良好,在VS2013中没有错误,因此

我完全知道这是因为我在用C编写基于文本的计算器项目时忽略了一些错误,但我不到一周前才开始学习C,所以请帮助我

因为整个代码是119行,所以我将只在真正的问题所在的地方发布必要的代码片段:(编译期间没有错误,因此除了这些行之外没有错误)

错误在于,即使在完美地输入CALCULATE、Factorse或AVERAGE之后,如果输入无效(即,如果没有输入这3个输入),我仍然会收到我编程的错误消息。它应该继续问我希望操作的第一个数字,就像为计算输入编写的一样


代码运行良好,在VS2013中没有错误,因此我确信这不是语法错误,而是我在这几行中做的愚蠢的事情

如果使用
==
则比较的是两个数组的地址,而不是数组的内容

相反,您需要执行以下操作:

if (strcmp(choice, "CALCULATE") == 0)

这里要提到两件事:

  • 它存在严重的安全问题,已从最新标准中删除。改用
  • 要比较字符串,应使用,而不是
    ==

  • 问题是您试图将字符串文字与字符数组进行比较。因为“==”比较运算符不是以这种方式实现的,所以C没有发现这些东西是相同的

    执行该比较有两个选项:

    1) 使用string.h库中的strcmp()函数

    2) 手动比较数组中的字符和字符串文字


    当然,第一种选择是最简单、最干净的。

    你不知道;t使用
    ==
    比较C中的字符串。您使用
    strcmp()
    对,谢谢,我来自Python。。。。那么我到底应该怎么做呢?另外,永远不要使用
    gets()
    ,而是使用
    fgets()
    。这能回答你的问题吗?谢谢,应该可以解决了。我还没有研究数组,我只是根据我从Python学到的东西来学习。我不确定你的问题是什么,但这应该是一个单独的问题。fgets()避免了缓冲区溢出,这是真的,但增加了不必要的步骤,而且说真的,只有我才会使用这个项目。@AnAnt不管是什么情况,如果你想写正确和标准的投诉代码,你不能使用
    gets()
    。我是为自己编写代码的,我尊重你的标准化直觉,但对我和我的4个朋友来说,这真的没那么重要,对吧?@AnAnt接受你的选择,但我建议,如果你在做什么,就把它做好。谢谢,我会这么做的。我来自Python,所以我几乎是本能地这么做的。
    if (strcmp(choice, "CALCULATE") == 0)