C++ 为什么不向用户请求其他输入?
这是一个更大项目的一部分。现在,它应该要求用户输入一个字符串,计算其中有多少个单词,打印出单词的#,询问用户是否想再次输入,然后如果他们想,再要求输入另一个字符串,等等。但这只在第一次时起作用。之后,它将是/否问题的答案作为测试字符串。例如:我喜欢编码。3.再一次?是/否,是。1.再一次?是/否。。。有人能告诉我如何修复这个小故障吗C++ 为什么不向用户请求其他输入?,c++,c++11,visual-c++,C++,C++11,Visual C++,这是一个更大项目的一部分。现在,它应该要求用户输入一个字符串,计算其中有多少个单词,打印出单词的#,询问用户是否想再次输入,然后如果他们想,再要求输入另一个字符串,等等。但这只在第一次时起作用。之后,它将是/否问题的答案作为测试字符串。例如:我喜欢编码。3.再一次?是/否,是。1.再一次?是/否。。。有人能告诉我如何修复这个小故障吗 #include <iostream> #include <string> using namespace std; string ori
#include <iostream>
#include <string>
using namespace std;
string original[10] = { "hello", "sir", "madam", "officer", "stranger", "where", "is", "the", "my", "your" };
string translated[10] = { "ahoy", "matey", "proud beauty", "foul blaggart", "scurvy dog", "whar", "be", "th'", "me", "yer" };
string input;
string ans;
bool playAgain()
{
cout << "Another? yes/no: ";
cin >> ans;
if (ans.compare("yes") == 0) { return true; }
if (ans.compare("no") == 0) { return false; }
}
int getNumOfWords(string input)
{
int numOfSpaces = 0;
string current;
for (int i = 0; i < input.length(); i++)
{
current = input.at(i);
if (current.compare(" ") == 0)
{
numOfSpaces++;
}
}
return numOfSpaces + 1;
}
void play(string input)
{
int numOfWords = getNumOfWords(input);
cout << numOfWords << endl;
}
void start()
{
getline(cin, input);
play(input);
}
int main()
{
bool playing;
do
{
start();
playing = playAgain();
} while (playing);
return 0;
}
#包括
#包括
使用名称空间std;
字符串原件[10]={“你好”、“先生”、“女士”、“官员”、“陌生人”、“在哪里”、“在哪里”、“我的”、“你的”};
字符串翻译为[10]={“啊哟”,“伙计”,“骄傲的美人”,“肮脏的布拉加”,“坏血病狗”,“鲸”,“贝”,“th'”,“我”,“耶”};
字符串输入;
字符串ans;
布尔·普拉亚()
{
cout>ans;
如果(ans.compare(“yes”)==0{return true;}
如果(ans.compare(“no”)==0{return false;}
}
int getNumOfWords(字符串输入)
{
int numOfSpaces=0;
串电流;
对于(int i=0;i cout这是因为getline
和cout
之间的差异。前者读取整个行直到并包括终止的\n
,而cout
将只读取到\n
或空格。代码中的cin
读取到ans
的是或否(试着在之后立即打印出来),但它不能解释\n
。因此,当你调用getline
时,它会发现\n
正在stdin中等待,并将其读入input
而不是阻塞,直到cin
不为空。当cin.getline()
读取输入,输入流中还有一个换行符,因此它不会读取c字符串。请使用cin.ignore()
beore调用getline()
请注意大小写。在play
中,您使用小写的y
,而在示例答案中,您在单词Yes
中使用大写的y
。这会导致一个错误情况,ans
既不是Yes
也不是no
,函数不会返回任何=>未定义的行为。我感到惊讶您的编译器没有警告您不要在所有路径上都返回值。
我建议删除您的if语句,并将其替换为return ans==“yes”
,因为std::string
也有一个=
操作符。谢谢Jerry Goyal,它现在可以正常工作了:)要跳过空白,我宁愿使用cin>>ws
,它只跳过空白。
void start()
{ cin.ignore();
getline(cin, input);
play(input);
}