簡體   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