2012-07-14 26 views
1

我有一個文件,其中將包含基本的數學運算。一個例子:fscanf文件雙打和字符

1 + 23/42 * 23 

我掃描文件,把每個「元件」到一個結構,將其推到堆棧上我創建。我的問題是:

char reading; 
while(!feof(fp)) { 
    fscanf(fp, "%c", &reading); 
    .... 

這將掃描1+23代替1+23。還有什麼其他建議可以使用fscanf並使它迭代並讀取所有輸入的相關類型?

問候,

回答

0

您應該使用fscanf()有點不同,像這樣:

char buf[16]; 
int val; 
char op; 

while (!feof(fp)) { 
    fscanf("%s ", buf); // Note: Without ' ' the last value would be readed twice 
    if (buf[0] == '+' || buf[0] == '-' || buf[0] == '/' || buf[0] == '*') { 
     op = buf[0]; 
     // do something with op 
    } else { 
     sscanf(buf, "%d", &val); 
     // do something with val 
    } 
} 

buf大小必須一些東西,可以存儲你的號碼的長度。

1

fscanf是這個職位的錯誤的工具,因爲它需要的是預先期待的是什麼格式都知道一個格式字符串。你最好的選擇是一次讀一個角色,然後建立一個令牌,然後你可以解釋它,尤其是如果你必須接受輸入如2+2(無空格)或(1 + 23)/42,並帶括號。

+0

所以你建議使用'strtok'而不是'fscanf'? – darksky 2012-07-14 13:08:48

+0

如果你可以確定所有的標記之間會有空白,那麼'strtok'就可以工作。但大多數表達式評估者並不要求用戶將事物分開。 – 2012-07-14 13:16:57