【问题标题】:How to compare string in if statement?如何比较if语句中的字符串?
【发布时间】:2019-10-08 16:06:17
【问题描述】:

我是 C++ 的初学者,我正在尝试制定一个可以在以后的程序中使用的决策函数。

这个想法是程序会问一个是/否的问题,用户会输入yesno,然后他们会根据他们的答案收到输出。但是当我尝试运行代码时,无论答案是什么,程序都会显示"yes" 案例的输出。代码如下:

#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>

class dec
{
    public:
        int flag;
        char yn[3];

        void decision()
        {
            std::cout<<"Enter yes or no:\n";
            std::cin>>yn;
            flag=0;
            while(flag==0)
            {
                if(strcpy(yn,"yes"))
                    flag=1;
                else if(strcpy(yn,"no"))
                    flag=-1;
                else
                {
                    std::cout<<"Invalid input.\n";
                    flag=0;
                }
            }
        }
        void reset()
        {
            flag=0;
        }
};

main()
{
    dec d;
    std::cout<<"Test?\n";
    d.decision();
    if(d.flag==1)
        std::cout<<"Correct.";
    else
        std::cout<<"Wrong.";
}

无论我输入什么,输出总是"Correct"。请帮忙。

PS:我正在使用flag,以便在需要时可以再次重用该功能。

【问题讨论】:

  • 使用std::string而不是char[],然后你可以使用yn == "yes"。在任何情况下,strcmp 是用于字符串比较的,而不是 strcpy 用于复制。
  • @CoryKramer:这就是答案——你能把它变成一个真正的答案,这样我们就可以标记这个问题已经回答了吗?
  • std::cin&gt;&gt;yn; -- 你的代码现在有一个被利用最多的漏洞——缓冲区溢出。如果我输入 100 个字符而不是 2 个字符会怎样?诸如std::string 之类的类可以防止这些事情发生。
  • 无关:为不是using namespace std;点赞!
  • 如果您在比较前转换为全部小写或全部大写,您应该只需要比较一次。在互联网上搜索“c++ 转换字符串 toupper”。

标签: c++ if-statement strcpy


【解决方案1】:

strcpy() 复制一个字符串到一个字符数组中。相反,您需要使用strcmp()比较两个数组。你这样做:

if (strcmp(yn, "yes") == 0)

另外请注意,您需要声明 char yn[4] 以允许终止 NULL 字符。

或者,您可以使用std::string 代替数组,然后将字符串与== 进行比较:

if (yn == "yes")

【讨论】:

  • 不知道为什么 strcmp() 建议不起作用。 Stil 将答案显示为“正确”。 std::string 的建议虽然有效。无论如何,感谢您的帮助。非常感谢。
  • @ArunRavindranath 确保声明 char yn[4];。请注意,您已经声明了一个包含 四个 元素的数组,而不是三个。在使用strcmp() 时,还要使用我上面显示的语法。有关详细信息,您应该阅读此功能的文档。如果您的代码仍然不完全正确,请查看this article,了解有关调试代码的一些提示,看看发生了什么。
  • @ArunRavindranath 附带说明:当用户输入“abcd”或“yes”或“no”以外的其他内容时会发生什么?
  • 如果用户输入的不是“是”或“否”flag=0 并且 while 循环再次重复,直到答案为是或否。顺便说一句,谢谢你的建议。我之前没有在 strcmp() 中使用“==0”,这就是它显示“正确”的原因。再次感谢您的帮助。
  • @ArunRavindranath 这只是您认为代码的作用。你真的应该试一试。提示:用户第一次输入后答案将如何变化?
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
相关资源
最近更新 更多