2014-10-28 61 views
0

我試圖使它的地方,當我按下輸入回車鍵,將進入到代碼的 例如下一部分:按輸入剛纔使得關於C中輸入另一行

int first 
int second 
int answer 

printf("Enter first number\n"); 
scanf("%d", &first); 

printf("Enter second number\n"); 
scanf("%d", &second); 

first + second = answer 

printf("%d", answer); 
return 0 

這只是一個例子,但我的代碼是這樣的:

#include <stdio.h> 

int main() 
{ 
    int pennies; 
    int dollars; 

    printf("How many pennies are in __ dollars?\n"); 
    scanf("%d", &dollars); 
    pennies = dollars*100; 
    printf("There are %d pennies\n", pennies); 
    return 0; 
} 

當我在終端運行它,它會問「有多少p ennies在__美元?「就像它應該。

問題是當我輸入7時,它會跳過一條線並永遠繼續。我試圖讓 它,當我按下輸入,它將乘以7 * 100和輸出「有700便士」。請幫助 。 (對於之前看到這個的人,我忘記刪除不足(「%d%* c」,美元);並且只有scanf(「%d」,美元);並且該解決方案也不工作)

+0

http://ideone.com/fDWRjg有趣的是,你的代碼對ideone工作正常。但埃德的解決方案也起作用。 – Baldrickk 2014-10-28 13:53:05

+0

沒有辦法「永遠持續下去」,而是會退出程序。但是要打印出所有內容,請使用fflush(stdout)關注每個printf();順便說一句:目前的代碼在我的linux系統上正常工作。 – user3629249 2014-10-28 14:46:56

+0

1)解釋「永遠繼續」2)'「%d%* c」'與'「%d」'不會影響您的代碼。 3)scanf(「%d」,&dollars)'的返回值是多少?它應該是1。 – chux 2014-10-29 19:39:04

回答

0

我假設你正在使用%d%*c捕捉您輸入的數據後換行,但你應該知道,scanf()功能,對許多格式字符串說明符,首先要跳過空格,包括換行符。

如果你想做基於行的輸入,fgets()通常是最好的方法,你可以使用代碼here作爲一個例子。這篇文章詳細描述了,你能避免很多的C.

底線做用戶輸入時,經常遇到的問題的方法是,它通常是更好地得到與fgets()的輸入線和然後過程中它在任何你需要的方式。

0

我想改變這個:

scanf("%d%*c", &dollars); 

到:

scanf("%d", &dollars); 

應該解決您的問題,因爲%* C跳過文字輸入,在這種情況下,可能是你的新行字符。

0

你寫了這行錯了!

scanf("%d%*c", &dollars); 

只是更改爲,

scanf("%d", &dollars); 

這裏是Demo.

瞭解更多的關於下面一行在哪裏以及如何有效地使用它here和這個article解釋了它在非常詳細!

scanf("%d%*c); 

參見下面的語句

scanf("%d%*c%d",&a,&b)? 

編譯器接受輸入,當它遇到%* C,但並不保存。

它主要用於輸入日期。用戶可以輸入日期爲2012年7月22日,因此編譯器採用整數'22'並存儲它,然後忽略字符'/'並存儲月份'7'等等...... 他們你可以自動存儲日,月,年,而不必擔心分別詢問他們的輸入。

希望它能幫助!