【发布时间】:2019-10-08 16:06:17
【问题描述】:
我是 C++ 的初学者,我正在尝试制定一个可以在以后的程序中使用的决策函数。
这个想法是程序会问一个是/否的问题,用户会输入yes 或no,然后他们会根据他们的答案收到输出。但是当我尝试运行代码时,无论答案是什么,程序都会显示"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,以便在需要时可以再次重用该功能。
【问题讨论】:
-
@CoryKramer:这就是答案——你能把它变成一个真正的答案,这样我们就可以标记这个问题已经回答了吗?
-
std::cin>>yn;-- 你的代码现在有一个被利用最多的漏洞——缓冲区溢出。如果我输入 100 个字符而不是 2 个字符会怎样?诸如std::string之类的类可以防止这些事情发生。 -
无关:为不是
using namespace std;点赞! -
如果您在比较前转换为全部小写或全部大写,您应该只需要比较一次。在互联网上搜索“c++ 转换字符串 toupper”。
标签: c++ if-statement strcpy