c语言中scanf()函数有回车符\n的问题

问题:C语言中用scanf函数输入字符、数字、字母和字符串时,如果带有回车符会出现什么情况呢?

出现问题情境:

notepad++  7.5.9.0

gcc version 4.7.1

strcmp函数的应用

#include

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、回车符\n、制表符)的情况:

scanf(“%d”,&a)

scanf(“%s”,&a)

scanf(“%c”,&a)

除了%c,其他的输入了空白符,都会发现程序依然提示等待你输入。就是因为它忽略掉所有前导空白符之后发现缓冲区是空的!于是乖乖地阻塞住,等待你输入。

(转自https://blog.csdn.net/weiweicsdn1/article/details/52185453?utm_source=blogxgwz3)

 

你可能感兴趣的:(C语言)