scanf的數值、字元讀取,清除stdin方法

練習一下
1.使用者需要輸入數值卻輸入字元,如何清除在stdin暫存的字元(錯誤輸入)
2.在緩衝區中會暫存到\n(也就是按下Enter鍵),當需要使用者輸入字串時,因為先前已先執行過輸入數值,並按下Enter鍵,所以實際印出來的會少一個字元,找出解決方式。

適當運用setbuf(stdin,NULL);來清除多餘的輸入或錯誤的輸入也是一個方式(使stdin由預設緩衝區切換成無緩衝區),當scanf指令執行後,緩衝區內容就會消失。

#include <stdio.h>
int main()
{
int value,i,n;
char str[5] ;
while(scanf("%d", &value)!=1){
printf("Error\nTry again\n");
setbuf(stdin,NULL);
}

setbuf(stdin,NULL);
n=sizeof(str);
for(i=0;i<n;++i){
scanf("%c", &str[i]);
}

printf("value:%d\n",value);

for(i=0;i<n;++i){
printf("%c",str[i]);
}
printf("\n");
printf("hello C world\n");
return 0;
}

留言