2017-04-01 80 views
0

我試圖建立一個rpn計算器,它需要從文件輸入。輸入的數字轉換成char數組從文件

輸入看起來像7 2 10 + -

我想把這個輸入一個字符數組是動態內存。 如何將數字添加到我的數組忽略空格?

我試着用fscanf(in,"%c", &input[i]),但存儲空格以及治療10和1和0

我新的C和我的主題非常基本的知識的任何幫助將十分讚賞:)謝謝

+0

'10'和''+''是兩種不同的數據類型。你不能將它們存儲在一個數組中,除非你至少創建了兩個數據字段(數字和運算符)的'union'。 – DyZ

回答

0

我認爲,這項工作是不是一個初學者應該開始;它有很多缺陷需要考慮,例如一個你的輸入必須從運營商分離的數字,是一個有效的數字可能是-10甚至+10爲好,即應對未知的令牌的數量是相當難在開始,依此類推。

無論如何,請參閱下面的代碼,至少解決了文件到一個字符串數組中讀出的話題,由此假設多達50代幣與每個至多99個字符的長度。其他有用的功能可能是isdigitatoi;希望它有一點幫助。

int main(int argc, char* argv[]) { 

    FILE *f = fopen("data.txt", "rt"); 
    if (!f) 
     return 0; 

    char* tokens[50]; 
    int nrOfTokens = 0; 

    char token[100]; 
    // fscanf(f, "%s", token) tries to read in the next token (separated by white space); 
    // it returns 1 if exactly one token has been read in, otherwise 0 
    while (nrOfTokens < 50 && fscanf(f, "%s", token)==1) { 
     tokens[nrOfTokens] = strdup(token); // strdup copies the content of `token` and allocates enough memory for this copy. 
     nrOfTokens++; 
    } 

    for (int i=0; i<nrOfTokens; i++) { 
     printf("token: %s\n",tokens[i]); 
    } 

    return 0; 
} 
+0

有什麼其他方法可以實現strdup的功能嗎?因爲使用-std = c99進行編譯時,strdup會引發警告。 – akzh

+0

@ akzh--'strdup()不是C標準庫函數,但它是POSIX。您可能需要使用功能測試宏來啓用它,加入這個作爲源文件的第一行:'#定義_POSIX_C_SOURCE 200809L'。如果'strdup()'在您的系統上不可用,則不難實現,您可以在線找到很多示例。 –