2012-02-19 22 views
-1

的變量剛剛開始使用C++,做了一些C,但是我不明白的一件事是您不能用>>代替=將讀取行分配給一個沒有>>

我下面的代碼:

char output[100]; 
if (myReadFile.is_open()) 
{ 
    for(int i=0; i != random_integer; i++) 
    { 
     if(i == random_integer-1){ 
     myReadFile >> output; 
     printf("%s",output); 
     } 
    } 
} 
myReadFile.close(); 

我想改變myReadFile >> outputoutput = myReadFile但你不能這樣做呢?

我的第二個問題是,我想測量我分配給輸出的字符串的長度,我怎麼能不循環整個char數組呢?

TIA

+0

不,您不能將文件分配給'char'數組。你期待什麼樣的行爲? – 2012-02-19 22:37:28

+2

爲什麼你認爲你應該能夠使用'='而不是'>>'? – 2012-02-19 22:38:11

回答

4

的,你不能使用=代替>>原因是因爲他們是兩個不相關的運營商。

要解決字符串長度問題,請不要使用原始的char數組。使用std::string而是因爲它在內部管理自己的內存:

std::string str; 

myReadFile >> str; 
+0

然後容易獲得它的大小? – 2012-02-19 22:42:10

+0

@Eric:是的,只需使用'str.size()'。 – 2012-02-19 22:46:07

-2

您不能使用=操作,但沒有理由你應該毫不猶豫地拿起另一個。我認爲+是有道理的,您的情況:

char* operator+ (char* s, std::istream &in) { 
    in >> s; 
    return s; 
} 

當您的代碼中使用這個,試試這個:

#include <string> 
#include <fstream> 

char* operator+ (char* s, std::istream &in) { 
    in >> s; 
    return s; 
} 


int main(){ 
    std::fstream myReadFile ("test.txt", std::fstream::in); 
    int random_integer = 4; 

    /*start your code*/ 
    char output[100]; 
    if (myReadFile.is_open()) 
    { 
     for(int i=0; i != random_integer; i++) 
     { 
      if(i == random_integer-1){ 
      output + myReadFile; 
      printf("%s",output); 
      } 
     } 
    } 
    /*end your code*/ 
} 

的test.txt內容:從代碼

輸出
aaaa 
bbbb 
cccc 
dddd 
eeee 

aaaa 

把笑話放在一邊,你應該不是實際上試圖在這種情況下使用不同的操作符。您的代碼正在從輸入(文件)流中讀取,因此您應該使用運算符>>,這使得清楚。

C++有一個稱爲'運算符重載'的特性,我上面演示了它,它允許您修改內置運算符的行爲以選擇類型。但是,您必須小心,不要以使操作更難理解的方式濫用該功能。

一般情況下,在編程時做出這樣的設計選擇時,請始終選擇讓您的代碼更易於讀者理解的選項。這適用於變量名稱,註釋等。

+2

我不確定這是一個非常有用的答案。 – 2012-02-19 23:20:12

相關問題