程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-關於scanf輸入數組單個數值的問題

c語言-關於scanf輸入數組單個數值的問題

編輯:編程綜合問答
關於scanf輸入數組單個數值的問題

我最近在學習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

附圖片:
圖片說明

ariesbryant
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved