家伙! 我正在编写一个用C ++编写的程序来演示' do-while'环。只要不是“再见”,该程序就会简单地回应用户输入的内容。' 因此,如果用户输入“嘿嘿”,该计划回应了嘿嘿'如果用户输入'再见'#39;程序停止了。这是代码:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string wordString;
do
{
cout << "\nEnter a word: ";
getline(cin, wordString);
cout << "\nYou entered: " << wordString<<"\n";
} while ((wordString!="goodbye")||(wordString!="Goodbye"));
return 0;
}
我想要做的是当用户输入“再见”字样时停止程序。或者&#39;再见。&#39;所以我添加了||检查,但它没有工作和 循环语句只是继续执行。 但是当我把&amp;&amp;而不是||它工作正常,程序停止,只要“再见”#39;或者&#39;再见&#39;进入了。
所以我的问题是:为什么&amp;&amp;工作和||没有按&#39;吨?
答案 0 :(得分:0)
使用|| deosnot停止progam,因为它是OR运算符,这意味着当语句中的任何一个为真时它将为真,所以如果任何一个是真的那么它将在另一方面执行AND(&amp;&amp;)运算符它意味着两者都是声明必须是真的才能执行。
答案 1 :(得分:0)
你必须使用logical and &&
而不是or ||
,因为如果只有wordstring
不等于ro&#34;再见&#34;你想要打破循环并且不等于&#34; GOODBYE&#34;:
while( wordString != "goodbye") && (wordString != "Goodbye");
或者您可以这样使用OR ||
:
while(wordString == "goodbye" || wordString == "Goodbye");
正如您所看到的那样,如果wordString
包含“和/再见”#34;或&#34; GOODBYE&#34;然后休息。如果其中一个操作数是非zeror,则逻辑OR返回true;如果两个操作数都为零,则返回false。逻辑AND&#34;&amp;&amp;&#34;如果仅,则返回true,如果两个操作数不为零,则返回flase(0)。
如果用户输入&#34; Goodbye&#34 ;;我能看到的内容在Capital中的第一个角色或任何小写和大写字母的混合,那么你的程序将看起来很荒谬;因为它不会破裂。
解决方法是您可以将输入文本转换为所有大写或小写字母,然后只检查一个值:
std::string wordString = "GoodBye";
for(int i(0); i < wordString.length(); i++)
wordString[i] = to_upper(wordString[i]);
// wordString = "GOODBYE"
// ....
while(wordString != "GOODBYE");