这是一个较大项目的一部分。现在它应该向用户询问一个字符串,计算其中有多少个单词,打印出单词数量,询问用户是否要再次执行,然后如果他们想要,请求另一个字符串,依此类推。但这只是第一次工作正常。之后,它将是/否问题的答案作为测试字符串。例如:我喜欢编码。再来一次?是/否。是。再说一遍?是/否......有人能告诉我如何修复这个故障吗?
#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;
}
答案 0 :(得分:2)
当cin.getline()
从输入中读取时,输入流中会留下换行符,因此它不会读取您的c-string。使用cin.ignore()
beore调用getline()
void start()
{ cin.ignore();
getline(cin, input);
play(input);
}
答案 1 :(得分:0)
这是因为getline
和cout
之间存在差异。前者在整行中读取并包括终止\n
,而cout
将只读取\n
或空格。您的代码中的cin
会在ans
中显示“是”或“否”(尝试立即将其打印出来),但它并未考虑\n
。因此,当您调用getline
时,它会在stdin中找到\n
等待,因此将其读入input
而不是阻塞,直到cin
为空。