2012-11-23 51 views
1

在我的程序下面的代碼:做......雖然並用C getche()

do 
    { 
     printf("\nEnter records of student %d: \n", i++); 
     printf("Name: "); 
     fgets(record.name, sizeof(record.name), stdin); 
     printf("\nAddress: "); 
     fgets(record.address, sizeof(record.address), stdin); 
     printf("\nClass Level: "); 
     scanf("%d", &record.classlevel); 
     printf("\nTelephone Number: "); 
     scanf("%ld",&record.telephone); 
     fwrite(&record, sizeof(record),1,fptr); 
     printf("\n\nAdd another record? [y/n]: "); 


    }while(getche()=='y'); 

當我看到輸出,它工作正常首次

輸入記錄學生1

名稱:<一些輸入>

地址:<一些輸入>

職業等級:<一些輸入>

電話號碼:<一些輸入>

添加另一條記錄? [Y/N]:<按下Ÿ>

輸入學生的記錄2

名稱:<沒有光標來了,無法提供在這裏輸入>

地址:<不僅可以在這裏輸入>

.....等。

發生了什麼事,爲什麼第一次迭代後,我是不能夠輸入名稱在do ... while循環。 getche()是否有問題?

,祝你幫助

由於提前

+1

這已經在SO上討論了數十億次。基本上scanf將緩衝區中的換行符作爲下一個調用的輸入。您需要在每次調用scanf後清除(刷新)輸入緩衝區。 http://stackoverflow.com/questions/3640604/c-getchar-vs-scanf – fayyazkl

回答

1

您需要fflush(stdin)do{...}while因爲getche()年初離開輸入緩衝區一個換行符。

+0

'fflush(stdin)'是未定義的行爲。有些實現聲稱''''''''''''''''''''''''''''''''''''''''' –

+0

你說得對,但我確實記得那樣解決類似的問題。 – Kninnug

+0

是的,它可能工作,但我寧願不依靠它。我的手冊頁上寫道:「對於輸入流,fflush()放棄了從底層文件中獲取但未被應用程序佔用的任何緩衝數據。」但是如果我沒有記錯,我嘗試過'stdin'一次,它不起作用。 –