2014-07-20 35 views
0

我正在爲一些朋友和我自己製作一個程序,用加權百分比計算成績,以及在最後通過指定等級的成績時我需要什麼成績。如何使用已經接受輸入的單個scanf函數退出循環?

的對問題的循環是這樣的,

for(;;) 
{ 
    scanf("%f", &s->grade); 
    if(s->grade == 'x') 
    { 
     break; 
    }else{ 
     grade += s->grade; 
    } 
} 

我怎麼能做出這樣的出口通過使用字母而不是數字的?
如果您需要更多代碼,請隨時詢問。

+3

在你的scanf調用中有一個逗號,對吧? –

+1

閱讀scanf的手冊頁面 –

+1

爲什麼不通過在可能的等級範圍之外輸入數字(如負數)來退出? – McLovin

回答

3

檢查返回值scanf - EOF意味着什麼都沒有被解析/掃描。

或者,使用兩步過程。首先,閱讀一個字符串並檢查它是否等於「x」或其他什麼,不是,用sscanf將字符串轉換爲浮點數。

+0

我想避免2個步驟的過程是我遇到的問題。 –

+0

@MackenzieBinns不,你不想避免這種情況,你想這樣做,因爲它是如何解決你的問題。使用fgets,檢查'x',如果不是'x'則使用sscanf。 –

0

你已經在要求一個浮點數了,並且你正在檢查這個字符'x',所以只需要用你想要的值替換'x',或者用一個or來替換它。

+0

他想檢查用戶是否提供了不是一個數字,但... – Deduplicator

+0

OP想知道「我怎樣才能通過使用一個字母,而不是一個數字?」 –

0
char buf[100]; 

while (fgets(buf, sizeof buf, stdin) && *buf != 'x') 
{ 
    sscanf(buf, "%f", &s->grade); // should check return value of sscanf to see if the input was correct 
    grade += s->grade; 
} 
0

所以我相信你要求從某個地方收到一個百分比,並希望將其轉換爲字母等級。

如果是這樣,我會從另一個函數接收百分比,這個函數被傳遞到你已經讀取的代碼或者從文件讀取。

然後,我會創建一個switch語句,它將接收到的值。截斷它爲int。然後,爲給定的值輸入你想要的字符。採取該字符,並將其帶入你有的功能。

Scanf("%f", x); 

函數(x)的{ 開關(X){ 案例90: (CHAR *)X = 'A'; 返回x; ... }

相關問題