我試圖建立一個rpn
計算器,它需要從文件輸入。輸入的數字轉換成char數組從文件
輸入看起來像7 2 10 + -
我想把這個輸入一個字符數組是動態內存。 如何將數字添加到我的數組忽略空格?
我試着用fscanf(in,"%c", &input[i])
,但存儲空格以及治療10和1和0
我新的C和我的主題非常基本的知識的任何幫助將十分讚賞:)謝謝
我試圖建立一個rpn
計算器,它需要從文件輸入。輸入的數字轉換成char數組從文件
輸入看起來像7 2 10 + -
我想把這個輸入一個字符數組是動態內存。 如何將數字添加到我的數組忽略空格?
我試着用fscanf(in,"%c", &input[i])
,但存儲空格以及治療10和1和0
我新的C和我的主題非常基本的知識的任何幫助將十分讚賞:)謝謝
我認爲,這項工作是不是一個初學者應該開始;它有很多缺陷需要考慮,例如一個你的輸入必須從運營商分離的數字,是一個有效的數字可能是-10
甚至+10
爲好,即應對未知的令牌的數量是相當難在開始,依此類推。
無論如何,請參閱下面的代碼,至少解決了文件到一個字符串數組中讀出的話題,由此假設多達50代幣與每個至多99個字符的長度。其他有用的功能可能是isdigit
和atoi
;希望它有一點幫助。
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;
}
有什麼其他方法可以實現strdup的功能嗎?因爲使用-std = c99進行編譯時,strdup會引發警告。 – akzh
@ akzh--'strdup()不是C標準庫函數,但它是POSIX。您可能需要使用功能測試宏來啓用它,加入這個作爲源文件的第一行:'#定義_POSIX_C_SOURCE 200809L'。如果'strdup()'在您的系統上不可用,則不難實現,您可以在線找到很多示例。 –
'10'和''+''是兩種不同的數據類型。你不能將它們存儲在一個數組中,除非你至少創建了兩個數據字段(數字和運算符)的'union'。 – DyZ