问题:C语言中用scanf函数输入字符、数字、字母和字符串时,如果带有回车符会出现什么情况呢?
出现问题情境:
notepad++ 7.5.9.0
gcc version 4.7.1
strcmp函数的应用
#include<stdio.h>
int main(){
char name1[32]="rock";
char name2[32];
int ret;
printf("请输入您的名字:");
scanf("%s\n",name2);
ret=strcmp(name2,name1);
printf("ret=%d\n",ret);
return 0;
}
output:
当输入名字按下回车符后,不会继续运行,系统依旧等着终端输入;
继续输入按下回车符,才继续输出ret值。
发现,输出值只跟第一行输出值有关。
解释:
第一次输入数字+回车,这个回车被编译器默认为分隔符,相当于scanf()只接受了“%d”,与其格式不匹配,继续要求你输入数据,当第二次随便输入一个数据之后,按下回车,这时编译器知道第一个回车不是分隔符,而是需要的匹配的格式。(这个解释好理解,转自https://blog.csdn.net/weixin_39846515/article/details/79195264)
另外scanf()忽略前置空白符(空白符:空格符null<space>、回车符\n<enter>、制表符)的情况:
scanf(“%d”,&a)
scanf(“%s”,&a)
scanf(“%c”,&a)
除了%c,其他的输入了空白符,都会发现程序依然提示等待你输入。就是因为它忽略掉所有前导空白符之后发现缓冲区是空的!于是乖乖地阻塞住,等待你输入。
(转自https://blog.csdn.net/weiweicsdn1/article/details/52185453?utm_source=blogxgwz3)