我最近在學習scanf的具體使用。然後遇到了一個問題就是,當我只想給數組的一個元素輸入scanf輸入的值的時候,無法輸入,也無法顯示。
程序是這樣的:
#include
#include
void main()
{
char a;
char b[10];
char c[10];
char *p;
p=b;
printf("a=");
scanf("%c",&a);
printf("b=");
scanf("%s",b);
printf("a=%c\n",a);
printf("b=%s\n",b);
printf("p=b=");
scanf("%s",p);
printf("c=");
scanf("%c",&c[0]);
printf("p=%s\n",p);
printf("c[0]=%c\n",c[0]);
}
結果是這樣的:
a=a
b=apple
a=a
b=apple
p=b=pineapple
c=p=pineapple
c[0]=
程序直接跳過了c=之後的scanf,這是為什麼呢?
沒有清空內存緩沖區。1、flush(stdin)刷新標准輸入緩沖區,把輸入緩沖區裡的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區裡的東西打印到標准輸出設備上。
2、scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、“回車”、“跳格”鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)。
下面是我的代碼:
#if 1
#include
int main()
{
char a;
char b[10];
char c[10];
char *p;
p = b;
printf("a=");
scanf("%c", &a);
fflush(stdin);
printf("b=");
scanf("%s", b);
fflush(stdin);
printf("a=%c\n", a);
printf("b=%s\n", b);
printf("p=b=");
scanf("%s", p);
fflush(stdin);
printf("c=");
scanf("%c", &c[0]);
fflush(stdin);
printf("p=%s\n", p);
printf("c[0]=%c\n", c[0]);
return 0;
}
#endif
附圖片: