#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
string cmd;
while(strcmp(cmd.c_str(),"exit")==0 && strcmp(cmd.c_str(),"\exit")==0)
{
cin>>cmd;
cout<<cmd;
}
return 0;
}
我被困住了。
答案 0 :(得分:14)
std::string
实例可以使用!=
或==
运算符直接与字符串文字进行比较。这使您的比较更加清晰。
请注意,\e
不是有效的字符转义符,如果您需要文字\
,则需要将\\
加倍。
while( cmd == "exit" && cmd == "\\exit" )
显然cmd
不能同时等于两个不同的字符串,大概是你的意思!=
。
另外,请考虑std::getline( std::cin, cmd )
是否比std::cin >> cmd;
更合适。在任何一种情况下,您都应该检查读操作是否成功,否则如果流关闭或进入失败状态,您可能会以无限循环结束。
就个人而言,我会选择这样的东西,假设您想要像代码那样回显退出命令。
#include <string>
#include <iostream>
#include <ostream>
int main()
{
std::string cmd;
while (std::getline(std::cin, cmd))
{
std::cout << cmd << std::endl;
if (cmd == "exit" || cmd == "\\exit")
break;
}
return 0;
}
答案 1 :(得分:13)
在修复了几个小错误之后,这可以在我的机器上运行:
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
int main()
{
std::string cmd;
while( std::strcmp(cmd.c_str(),"exit")!=0
&& std::strcmp(cmd.c_str(),"\\exit")!=0)
{
std::cin>>cmd;
std::cout<<cmd << '\n';
}
return 0;
}
但是,我想知道你为什么要使用std::strcmp()
。正如您刚刚发现的那样,它不像std::string
类那样容易使用。此
while(cmd!="exit" && cmd!="\\exit")
同样适用,更容易理解,因此更容易正确。
答案 2 :(得分:4)
strcmp
在相等时返回0。所以我想你想要!= 0
肯定strcmp
不会为两者返回0,因为它不能等于两者。
看起来你的字符串开头有一个反斜杠,你应该用双反斜杠转义它。
答案 3 :(得分:2)
您所处的状态永远不会评估为true
,因为您正在测试以检查cmd字符串是否等于"exit"
和 "\\exit"
。一个字符串永远不能同时等于两个值。
答案 4 :(得分:0)
你的问题是暂时的条件。
您可能希望在用户进入退出时退出循环,因此您应该使用:
while(strcmp(cmd.c_str(),"exit")!=0 && strcmp(cmd.c_str(),"\exit")!=0)
答案 5 :(得分:0)
只需记住几件事,我重申一些值得重复的建议(1)次。
您正在使用C ++,它是面向对象的,即最好将数据和对其起作用的函数组合在一起。在这种情况下,请使用字符串类而不是strcmp提供的字符串比较选项。
您的程序中存在逻辑错误,它会编译,但我担心这不是您想要的。 if(a == x&amp;&amp; a == y)这将永远为假,因为除非x = y,否则不能等于x和y,在你的情况下显然是x!= y。
< / LI> 醇>干杯, 帕