#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;
}
Run Code Online (Sandbox Code Playgroud)
我被卡住了.
CB *_*ley 15
甲std::string实例可以直接与文字使用一个字符串进行比较!=或==操作员.这使您的比较更清晰.
请注意,这\e不是有效的字符转义,\如果您的意思是文字,则需要加倍\\.
while( cmd == "exit" && cmd == "\\exit" )
Run Code Online (Sandbox Code Playgroud)
显然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;
}
Run Code Online (Sandbox Code Playgroud)
sbi*_*sbi 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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道你为什么要使用它std::strcmp().正如您刚刚发现的那样,它并不像std::string课堂那么容易使用.这个
while(cmd!="exit" && cmd!="\\exit")
Run Code Online (Sandbox Code Playgroud)
同样有效,更容易理解,因此更容易正确.
strcmp当它们相等时返回 0。所以我认为你想要 != 0
肯定strcmp不会为两者都返回 0,因为它不能等于两者。
此外,您的字符串开头似乎有一个反斜杠,您应该使用双反斜杠对其进行转义。
| 归档时间: |
|
| 查看次数: |
37914 次 |
| 最近记录: |