字符串輸入之%s


[ 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個條件,滿足其一即可:

  1. 如果指定了字段寬度,讀取的字符數達到了了指定的寬度。(如%15c,輸入的字符數目達到了15個)
  2. 讀取時遇到了一個與字符說明符不匹配的字符。(如%d,而輸入的是一個字符Y)
  3. 遇到了空白字符
  4. 到達文件末尾


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM