2014-11-04 154 views
-2

我想讀取一個方程中的mx + b = y形式,其中m,b和y是整數,x是一個字符。如何讀取整數和字符,並檢查用戶是否以完全形式輸入數據。也就是說,我需要檢查用戶輸入'+'符號和'='符號並使用正確的變量。例如)我希望它接受mx + b = y但不是mX + b = y或另一個示例:接受mx + b = y但不是mx-b = y。而且我也需要它在等式之後忽略任何額外的輸入。使用多種數據類型的scanf

我已經使用類似的嘗試:

的scanf( 「%d%C%C%d%C%d」,&米,& X,&符號,& B,& equal_sign,&ÿ );

使用這種格式,它會正確讀入第一個數字,但會跳過將下一個字符放入變量x中,而是將其放入符號中。

對不起,冗長的措辭,但我會感謝任何幫助,只是讓我知道,如果我需要澄清任何事情。謝謝。

+2

http://stackoverflow.com/questions/26697549/scanf-to-read-multiple-data-types-from-one-input – BLUEPIXY 2014-11-04 08:50:23

回答

-1

時,你有輸入提示,你應該嘗試輸入一個值標籤另一個值比tab..and等等。直到你輸入的所有值。

的scanf( 「%d%C%C%d%C%d」,&米,& X,&符號,& B,& equal_sign,& Y);您輸入

第一個值將壓片 第二個值將被賦給x 壓片後分配到m, ..

做,直到你輸入的所有值..

+0

-1:這並沒有真正回答這個問題 - 你至少應該提供一個簡單的代碼示例來說明你想說的話。 – 2014-11-04 08:09:42

+0

事情是我不能指望用戶輸入任何一個某種形式的方程。如果他們輸入它錯誤地我想返回一個錯誤,但如果他們輸入它正確,包括正確的變量,而「+」和「=」號,我要接受它。 – Denny 2014-11-04 08:11:51

+0

你需要使用if/else或開關情況下所需的variable..and如果該變量不符合我們的要求,要求再次輸入用戶... 像 的scanf(); if(x!='X') {再次掃描} – 2014-11-04 08:14:24

4

我會使用getline(3)或者可能是fgets(3)讀取整行,然後使用帶給定結束指針的strtol(3)或明確測試返回的計數,或者使用%n格式說明符,手動分析包含該行的緩衝區。

您可能想要parse表達式爲AST,例如,使用一些recursive descent parsing技術。又見infix-calc example of GNU bison

如果你確信你輸入的形式爲正是一個x +b=Ç你可以(因爲你想只輸入3x-5=8這是不自然的3x+-5=8)混合使用strtol。另請參見strncmp(3)strtok(3)

PS。按照全部我在這裏給你的鏈接。他們是全部相關!

0

獲取字符串格式(緩衝液)的方程,並使用sscanf函數解析這個緩衝器。通過使用scanf函數可能會出現刷新事物的問題

+0

-1:這並沒有真正回答這個問題 - 您至少應該提供一個簡單的代碼示例來說明您想說的話。 – 2014-11-04 08:55:38