繁体   English   中英

Loop循环使用以获得输入字符串的结尾

[英]While Loop contines forever to get end of input string

如何运行while循环,直到到达行尾或空字符。

这是我的代码

#include<iostream>
using namespace std;
main()
{
    char input[20];
    cout<<"Enter a line: ";
    cin>>input;

    while(input!='\0')
    {
        cout<<"This is a text";

    }
    system("pause");
}

如果要读取直到换行符或NUL,请在循环一次读取一个字符。

#include<iostream>
int main()
{
  char input;
  std::cout << "Enter a line: " << std::flush;
  while(std::cin >> input && input != '\n' && input != 0) {
    std::cout << "This is a test\n";
  }
}

笔记:

  • 主要需要返回类型
  • 永远不要说“使用命名空间标准”;
  • 如果你想让cout立即出现,别忘了冲洗。
  • 注意while条件下的复合测试:
    • 首先,读取成功了吗?
    • 接下来,它不是'\\n' (您的条件之一)。
    • 接下来,是不是NUL(你的另一个条件)。
  • 循环体将按输入字符执行一次 - 这是你想要的吗?

但是,请考虑您是否正确指定了您的要求。 这是一个不寻常的要求 - 为什么文本文件中会有NUL,为什么要单独处理每个字符?

在惯用的C ++中,您可以使用std::getline一次读取一行中的输入文件:

std::string myString;
while(std::getline(std::cin, myString)) {
   // process myString
}

如果您只想读一行:

std::string myString;
if(std::getline(std::cin, myString)) {
  // process myString
}

最后,如果您想读取一行并忽略其内容:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

像这样:

std::string line;

if (std::getline(std::cin, line))
{
  std::cout << "Thank you, you said, \"" << line << "\".\n";
}
else
{
  // error, e.g. EOF
}

如果要读取行,请使用while循环:

while (std::getline(std::cin, line))
{
  std::cout << "Thank you, you said, \"" << line << "\".\n";
}

尝试类似的东西:

i = 0;
while ((input[i] != '\0') && i < 20)
{
  cout<<"This is a text";
  i++;
}

问题是你一次读取整块文本,然后打印直到输入为'\\ 0'。 但是,您实际上并不会在循环中更新此内容。 您可以在循环内使用cin来获取输入,或者如果您尝试输出每个字符,则可以对char数组进行索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM