2010-11-18 52 views
1

中讀取簡單的公式字符串作爲作業,我們需要輸入簡單的公式(如3*2,4+10,50/16等),並使用加法,減法和位移計算結果(和休息) 。無論如何,我可以使用三個後續的輸入讀數,但我想我會嘗試使用fgets()sscanf()一次性獲得公式。以下是我有:C,從輸入

int *v; // value (left side) 
int *m; // modifier (right side) 
char *o; // operant 

int res = sscanf(buffer,"%d%s%d",v,o,m); 

但當然,這是不行的,因爲o得到該字符串的所有剩餘部分,留下m一無所有(m等於任何值就是它被宣佈時)

現在,完成此操作的正確方法是什麼?

注意:我使用a trim function修剪多餘的空格。

回答

2

嘗試%c,而不是%s。如果操作符總是單個字符,並且操作符和操作數之間沒有空格,則應該起作用。

順便說一句,你初始化v,mo實際上指向什麼?這將是更好的做到這一點:

int v; 
int m 
char o; 

int res = sscanf(buffer, "%d%c%d", &v, &o, &m); 

由於我的「介紹在C程序設計」教授常說:「C是危險的做法安全的C!」。

+1

我省略了初始變量的聲明(他們不是指針開始,但我通過他們的指針指向一個函數,其中'的sscanf()'坐) – 2010-11-18 14:44:43

+0

確定。只是檢查。這是一個常見的錯誤,我不得不問。 – Dima 2010-11-18 14:47:39

0

由於您沒有多餘的空格,並且運算符都是一個字符長,因此可以使用%c填寫o

+0

我可以...這將是一個簡單而快速的解決方案,所以我不必編寫整個公式分析器:P – 2010-11-18 14:47:05

1

您可以使用%[-+*/](與運營商的設置),以確保,即運營商串只能得到運營商的字符。