2011-11-17 80 views
1

如何運行while循環直到行尾或空字符到達。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"); 
} 
+0

這是不是很清楚你想要做什麼,所以一些更多的細節會有所幫助。 – Dragos

+0

-1:提供一個甚至不編譯的示例程序。 –

回答

0

嘗試像這樣:

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

像這樣:

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"; 
} 
3

如果您想要閱讀,直到換行符或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"; 
    } 
} 

注:

  • 主要需要返回類型
  • ,永不說: 「使用命名空間std;」
  • 不要忘記沖洗,如果你想立即出現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'); 
+0

你寫過_Never,永遠說「使用命名空間標準;」_ - 你能解釋一下嗎? –

+1

@VitalyIsaev由於產生的名稱空間污染產生[微妙的錯誤](http://ideone.com/wJwwYF),並且沒有任何用處。查看http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice出於其他人的原因。 –

0

問題是,您一次讀取整個文本塊,然後打印它直到輸入爲'\ 0'。但是,你永遠不會在循環內更新它。你可以在循環中使用cin來獲得輸入,或者如果你想輸出每個字符,你可以索引char數組。