2015-10-21 81 views
0
#include <stdio.h> 
struct book 
{ 
    char name[1000]; 
    int price; 
}; 

int main() 

{ 

    struct book ct1[5]; 
    int i; 

    for (i = 0; i < 5; i++) 
    { 
    printf("Please Enter %d Number Book Name: ",i+1); 
    gets(ct1[i].name); 
    printf("Price: "); 
    scanf("%d", &ct1[i].price); 
    } 

for (i = 0; i < 5; i++) 
{ 
    printf("%d Nuumber Book's name and price : \n",i+1); 
    printf("%s = %d\n", ct1[i].name, ct1[i].price); 
} 


return 0; 

} 

我寫這段代碼取書名和價格並打印出來。取結構變量中的字符串和整數

輸入: 請輸入1號簿名稱:福爾摩斯

價格:100

...................

...................

輸出:

怒江MBER書的名稱和價格: 福爾摩斯= 100

.................

............... 。

,但它採取輸入這樣 請輸入1號簿名稱:福爾摩斯

價格:100

請進入2號簿名稱:價格:........

第一次是正確的,但從第二次出現問題。請幫幫我。

+2

究竟「出錯」換行符?不要使用'gets'而是使用'fgets'! – Downvoter

+1

'scanf(「%d」' - >'scanf(「%d%* c」' – BLUEPIXY

+0

它停止接收字符串 –

回答

1

首先停止使用gets,使用fgets代替 -

fgets(ct1[i].name,sizeof ct1[i].name,stdin); 

及後您的scanf你可以做到這一點 -

while((c=getchar())!=EOF && c!='\n');  

for循環聲明cint

這是從stdin中刪除'\n',它在每次迭代中保留scanf並導致fgets返回。

+0

它的工作原理是否完美。請問你能解釋一下while循環是如何工作的? –

+0

@TawhidurRahmanTanim從'getchar'被分配給'c',如果返回並存儲在'c'中的值是'EOF'或''\ n''循環退出,如果沒有則循環提取,直到'EOF'或''\ n''遇到這種情況,如果在'stdin'中存在''\ n''',那麼它就會從中讀取。 – ameyCU

0

scanf後加入這一行去除殘留在標準輸入

fflush(stdin) 
+0

請參閱http://stackoverflow.com/questions/2979209/using-fflushstdin – chux

+0

從來不知道。 @chux –