2013-03-07 80 views
-1

我試圖從文本文件中讀取數字,但我不允許使用二進制文件。 我試過兩種方法來做到這一點,並且都返回了一個奇怪的結果。嘗試從文件中讀取數字時出現奇怪的數字

第一種方法:

char *theNumber; 
    int i = 0; 
    while(data>>text) 
    { 
     theNumber[i] = text; 
     i++; 
    } 

返回一些奇怪的重音字符。 第二

int theNumber; 
while(data>>text) 
{ 
    theNumber = text; // I tried theNumber<<text; as well 
} 

當我清點這一次它返回時,文本文件包含123


string filename; 
    char text; 
    int p; //first prime number 
    int q; //second prime number 
    unsigned long long toBeEncrypted; 

    cout<<"Enter name of file to encrypt: "; 
    cin>>filename; 
    ifstream data; 
    ofstream encryptedData; 
    encryptedData.open("RSA_cipher.txt"); 


    cout<<"Please enter two prime numbers:"<<endl; 
    p = getPrime(1); 
    q = getPrime(2); 

    //doing stuff with file 
    int theNumber; 
    data >> theNumber; 
    //int i = 0; 
    /*while(data>>text) 
    { 
     theNumber[i] = text; 
     i++; 
    }*/cout<<theNumber; 

... //無關的其他的東西,一些大數量的結果問題

回答

1

此代碼:

char *theNumber; 
int i = 0; 
while(data>>text) 
{ 
    theNumber[i] = text; 
    i++; 
} 

擁有未定義行爲,因爲你正在使用theNumber[i]訪問,你甚至還沒有一個數組分配。你應該這樣做:

char theNumber[255]; // Buffer size depends on the particular application 
int i = 0; 
while(data>>text) 
{ 
    theNumber[i] = text;   
    i++; 
} 

第二次嘗試:

theNumber = text; 

可能會或可能無法正常工作,這取決於你如何定義text。如果不知道text的定義,這是不可能回答的。

無論如何,如果你想從輸入流中的數字,閱讀,只是做:

int number; 
data >> number; 

UPDATE:

在過去的代碼片斷你更新時,data流構造,但從不打開。它沒有關聯到任何文件。因此,嘗試從該流讀取將不會成功,並且沒有任何內容將存儲到number(未初始化)中。

ifstream data; 

// data is not associated to any file after construction... 

int theNumber; 
data >> theNumber; 
+0

我打錯了,我的意思是1 =符號。該代碼沒有c/p'd,我手動鍵入它抱歉。我試着用'data >> number'做你的方法,並且它仍然打印出一長串數字 – SemicolonExpected 2013-03-07 21:33:09

+2

@ArcaneExplosion:什麼時候打印?你如何存儲號碼?你還在使用'text'和'theNumber'嗎? 「text」的定義是什麼?從你的問題文本中看不到很多東西。嘗試在那裏放一個你正在使用的代碼的簡短,完整的例子。否則,我會解決你沒有的問題,而不是解決你有的問題 – 2013-03-07 21:35:24

+0

不,我沒有使用整個while循環,而只是執行'data >> theNumber',並在錯誤檢查後立即打印出來目的。在第二個例子中'theNumber'是'int' – SemicolonExpected 2013-03-07 21:36:54

0

創建您的號碼存儲。

char *theNumber; 

這是一個指針。它指向某處是任意的,因爲你還沒有分配地址。

試試這個。

char theNumber[10]; // Whatever size you need. 

或這個。

int theNumber; 
+0

我使用的第二個例子使用int theNumber,而且看起來似乎也沒有問題。另一個返回ASCII – SemicolonExpected 2013-03-07 21:34:36

0

您沒有爲char *theNumber;分配任何內存。
theNumber點到任意位置,要打印隨機字符

相關問題