据我所知,do-while循环至少可以工作一次,即使它们提供了条件。但是,当我键入point时,此功能不起作用。我的意思是,当我键入“ It works”时,它会重复一遍。但是,当我键入“ It works”时,它结束了,不再重复。你们能告诉我我想念的吗?
#include<iostream>
#include<string>
using namespace std;
int main(){
char c;
string str;
cout<<"Please type some lines of text.Enter a dot (.) to finish. \n";
do
{
c=cin.get();
str+=c;
if(c=='\n')
{
cout<<str;
str.clear();
}
}while(c!='.');
return 0;
}
答案 0 :(得分:1)
您的意图和代码之间没有联系。
当你说:
cout <<“”请输入一些文本行。输入一个点(。)以结束。\ n“;
仅当行中唯一的东西是点时,您才希望程序退出循环。但是,您编写的代码是:在输入中的任何地方遇到点时退出循环。
如果您输入的是"this. is a line"
,则程序将在点处停止,而不会读取" is a line"
部分。
您需要做的是:
我还将循环从do-while
更改为while
。这样可以确保如果没有更多输入,则退出循环。
string line;
cout << "Please type some lines of text. Enter a dot (.) to finish. \n";
while ( std::getline(cin, line) )
{
if ( line == "." )
{
break;
}
// Use line
}
如果您的意图是真正停止输入中遇到的第一个点,那么您只需稍作更新即可。
string str;
cout << "Please type some lines of text. Enter a dot (.) to finish. \n";
do
{
c = cin.get();
str += c;
if ( c == '\n' )
{
cout << str << endl;
str.clear();
}
} while (c != '.');
// If a dot was found anywhere but as the first character in the
// input, print the input before the dot.
if ( !str.empty() )
{
cout << str << endl;
}
答案 1 :(得分:0)
似乎您希望在键入字符串后重复该字符串。这样,我会向您建议:
#include<iostream>
#include<string>
using namespace std;
int main(){
string line;
cout << "Please type some lines of text. Enter a dot (.) to finish. \n";
while ( std::getline(cin, line) )
{
if ( line != "." )
{
cout << line << endl; // Repeat the text typed
line.clear();
}else
break;
}
}