2016-11-11 53 views
0

嘿,我知道我只能使用字符串從文本文件中讀取。不過,我需要使用一個char數組。就像如果我是用一個字符串我會做這個如何使用輸入將字符串傳遞到文本文件中的字符數組

while (!input.eof()){ 
    input >> s; 
} 

我不確定我會怎樣,如果我不知道字符串的長度。我知道我可以使用getLine,但我更喜歡使用輸入。

我在想,也許我可以使用循環來檢查,直到它到達「\ 0」?

無論如何,我有一種感覺,這個問題之前已被問過,但如果它有我找不到它。很抱歉,如果是這樣的話。

+0

關於您發佈的代碼:我不會這樣做。閱讀這個爲什麼:[爲什麼'iostream :: eof'內循環條件被認爲是錯誤的?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered -wrong) – WhozCraig

+2

爲什麼你不想使用'getline'有沒有原因? – celtschk

回答

-1

你需要使用每次從命名「FILENAME.TXT」您的.txt文件讀取字符時候你字符數組的一個單一的元素


istream的運營商> >從.txt文件中提取並依次解析一個字符字符數組(同時跳過空格)。這是因爲istream運算符>>將執行提取和解析操作作爲目標變量類型的表示,在此情況下爲char。


您還需要使用while(!ws(input).eof())循環來讀取整個.txt文件。 然後,我會建議此解決方案:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

    int main() 
    { 
     ifstream input("filename.txt"); 
     const int MAX = 10000; 
     char characters[MAX]; 
     int i = 0; 
     while (!ws(input).eof()) { 
      input >> characters[i]; 
      cout << characters[i] << " "; 
      i++; 
     } 
    } 
+0

雖然此代碼片段可能會解決問題,包括解釋[真的有幫助](// meta.stackexchange.com/q/114762)以提高帖子的質量。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

0

你可以考慮istream::getline。請注意,它可以用於C++字符串,並且它必須具有C字符串的長度限制。

我認爲你應該避免在檢查條件時直接檢查eof。它只會返回true,達到文件結束。所以,如果你有多行,你讀它,然後做一些計算,當它在閱讀步驟到達文件結尾時,結果可能是意料之外的。所以EOF的檢查應該在像我的例子那樣從流中讀取後立即進行。

int main() 
{ 
    ifstream input("filename.txt"); 
    const int MAX = 10000; 
    char characters[MAX]; 
    while (true) { 
     input.getline(characters, MAX - 1, '\n'); 
     if (input.eof()) 
      break; 
    } 
} 
相關問題