2010年2月27日 星期六

scanf & Enter

前幾天在練習字元的scanf 時,發現在作各兩次字元輸入時, 會造成無法成功讀取. 情況如下:

scanf("%c",&x);
scanf("%c",&y);

其中在第二次使用scanf時, 可能會有問題. 主要原因為第一次輸入字元x時,
我們需要須入Enter進入後面的statement, 但其在電腦會判讀我們所key的字元
同時也把Enter也記錄進去緩衝區裡頭, 等到第二次對字元y作scanf時,
它會直接判讀上一次留下的Enter鍵. 在此Enter其實是被當成一個字元\n被暫存起來,
這樣會造成無法正確輸入字元y.

如何有效避免這種問題, 在此來分享解決Enter暫存問題

方法(1)
scanf("%c",&x);
scanf("    %c",&y);  //在第二個scanf的%c前加入一個空格


方法(2)
scanf("%c/n",&x); //在第一個scanf的%c後加入一個/n
scanf("%c",&y);


方法(3)

scanf("%c%*c",&x);  //在第一個scanf的%c後加入%*c跳脫字元

scanf("%c",&y); 

方法(4)
x=getche();
y=getche();

方法(5)
scanf("%c",&x);
fflush(stdin);             //使用fflush函數來清空緩衝區資料
("%c",&y);

除了上述方法外, 仍有許多不同的方法可以克服, 如加上while判斷字元是否為/n, 如果不是才能執行,  有興趣的朋友可以去網路上作 scanf, Enter關鍵字搜尋. 就可以找到許多不同種的方法.