scanf("%d",&i);
scanf("%c",&ch);
在这种情况下,换行符(即在数字后按下的回车键)停留在输入缓冲区中并向前移动到 ch
但在这种情况下:
scanf("%d",&i);
scanf("%s",s);
输入缓冲区不包含换行符,即缓冲区已清除(我不确定缓冲区是否已清除)且换行符未在字符串 s
中删除有人可以对此有所了解吗?为什么在扫描字符串时不采用换行符?
答案 0 :(得分:1)
%s
和%c
的行为在标准中定义。
%s
说明符定义为采用一系列非空白字符,这意味着将跳过初始空格(包括\n
):
另一方面,
%s
匹配不是空格字符的字节序列。应用程序应确保相应的参数是指向char,signed char或unsigned char数组的初始字节的指针,其大小足以接受序列和终止空字符代码,这些代码应自动添加。 (documentation)
%c
对空白没有任何特殊处理:
%c
匹配由字段宽度指定的数字的字节序列(如果转换规范中不存在字段宽度,则为1)。