[ Example ]
#include <stdio.h>
int main()
{
int no;
char name1[15], name2[15], name3[15];
printf("Enter no and name1:\n");
scanf("%d %15c", &no, name1);
printf("%d %15s \n\n", no, name1);
printf("Enter no and name2:\n");
scanf("%d %s", &no, name2);
printf("%d %15s \n\n", no, name2);
printf("Enter no and name3:\n");
scanf("%d %15s", &no, name3);
printf("%d %15s \n\n", no, name3);
return 0;
}
[ Output ]
[ Question ]
1、第二次輸入完成后,按下回車,程序直接結束。為什么會自動忽略第三次輸出?
2、為什么 York 進行輸出?
[ Notice ]
當使用字符說明符%s時,一旦遇到空格,讀取工作將終止。
scanf從輸入數據行讀取數據時,將忽略空白符:空格、制表符、換行符。
[ Answer ]
① 首先,我們測試另一組輸入
通過對比兩組輸入,我們發現,當遇到與字符說明符不符的用戶輸入時,scanf會自動的進行匹配。將整型數字賦值給%d,字符類型賦值給%s表示的變量,而與這兩段拼接在一起的字符串之間是否有空格無關。
② 通過調試,我們發現,能夠使scanf 提前終止,有4個條件,滿足其一即可:
- 如果指定了字段寬度,讀取的字符數達到了了指定的寬度。(如%15c,輸入的字符數目達到了15個)
- 讀取時遇到了一個與字符說明符不匹配的字符。(如%d,而輸入的是一個字符Y)
- 遇到了空白字符
- 到達文件末尾