做一会儿不重复

时间:2019-07-01 21:56:11

标签: c++

据我所知,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;
  }

2 个答案:

答案 0 :(得分:1)

您的意图和代码之间没有联系。

当你说:

  

cout <<“”请输入一些文本行。输入一个点(。)以结束。\ n“;

仅当行中唯一的东西是点时,您才希望程序退出循环。但是,您编写的代码是:在输入中的任何地方遇到点时退出循环。

如果您输入的是"this. is a line",则程序将在点处停止,而不会读取" is a line"部分。

您需要做的是:

  1. 逐行读取输入。
  2. 当行中唯一的东西是点时退出循环。

我还将循环从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
}

更新,以回应OP的评论

如果您的意图是真正停止输入中遇到的第一个点,那么您只需稍作更新即可。

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;

}

}