我的代码第一次运行并运行良好,但我遇到了循环问题:
我的代码不计算单词中的字符
第二次按“是”时,它会将所有内容都打印出来。我必须在错误的地方有一个循环,但我找不到它的生命。
#include <string>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
char character;
string sentence;
char answer;
int cCount;
while(1) {
cout << "Enter a character to count the number of times it is in a sentence: ";
cin >> character;
cout << "Enter a sentence and to search for a specified character: ";
cin >> sentence;
if(character == '\n' || sentence.empty())
{
cout << "Please enter a valid answer:\n";
break;
}
else {
cCount = count(sentence.begin(), sentence.end(), character);
cout << "Your sentence had" << " " << cCount << " " << character << " " << "character(s)" << '\n';
}
cout << "Do you wish to enter another sentence (y/n)?: \n";
cin >> answer;
if (answer == 'n'){
break;
}
}
return 0;
}
答案 0 :(得分:2)
通过阅读你的代码,它看起来很好,除非你得到了句子。使用cin,它只会在看到换行符或空格之前读取,所以如果你输入一个句子,它会将每个单词作为不同的输入读取。
尝试使用getline(cin,sentence)并查看是否可以解决问题。
编辑:忘记添加:在getline之后使用cin.ignore()。 cin读取并包括换行符(或空格),而getline只读取换行符,因此换行符仍在缓冲区中。
答案 1 :(得分:1)
使用
cin.ignore(); //dont forget to use cin.ignore() as it will clear all previous cin
getline(cin, sentence, '\n'); //take the sentence upto \n i.e entered is pressed
答案 2 :(得分:0)
你没有错误的循环。你假设
是错的cin >> sentence;
做了与实际不同的事情。
如果您想阅读一行文字,请执行此操作
getline(cin, sentnence);
您的代码只读一个单词。
答案 3 :(得分:0)
使用cin
它将以换行符或空格结尾
例如:
当您输入hello world
时,它将获得hello
你可以试试
getline
它将以换行符结束
答案 4 :(得分:0)
这是有效的,试试这个。
#include <string>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
char character;
string sentence;
char answer;
int cCount;
while(1) {
cout << "Enter a character to count the number of times it is in a sentence: ";
cin >> character;
cout << "Enter a sentence and to search for a specified character: ";
fflush(stdin);
getline(cin, sentence, '\n');
if(character == '\n' || sentence.empty())
{
cout << "Please enter a valid answer:\n";
break;
}
else {
cCount = count(sentence.begin(), sentence.end(), character);
cout << "Your sentence had" << " " << cCount << " " << character << " " << "character(s)" << '\n';
}
cout << "Do you wish to enter another sentence (y/n)?: \n";
cin >> answer;
if (answer == 'n'){
break;
}
}
return 0;
}
输入第一个输入并输入后,输入被视为句子中的输入 所以,你需要刷新它,之后你可以扫描那句话。
答案 5 :(得分:-1)
尝试:
cCount = count(sentence.c_str(), sentence.c_str()+sentence.length(), character);