C++ 为什么不向用户请求其他输入?

C++ 为什么不向用户请求其他输入?,c++,c++11,visual-c++,C++,C++11,Visual C++,这是一个更大项目的一部分。现在,它应该要求用户输入一个字符串,计算其中有多少个单词,打印出单词的#,询问用户是否想再次输入,然后如果他们想,再要求输入另一个字符串,等等。但这只在第一次时起作用。之后,它将是/否问题的答案作为测试字符串。例如:我喜欢编码。3.再一次?是/否,是。1.再一次?是/否。。。有人能告诉我如何修复这个小故障吗 #include <iostream> #include <string> using namespace std; string ori

这是一个更大项目的一部分。现在,它应该要求用户输入一个字符串,计算其中有多少个单词,打印出单词的#,询问用户是否想再次输入,然后如果他们想,再要求输入另一个字符串,等等。但这只在第一次时起作用。之后,它将是/否问题的答案作为测试字符串。例如:我喜欢编码。3.再一次?是/否,是。1.再一次?是/否。。。有人能告诉我如何修复这个小故障吗

#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;icout这是因为
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);
}