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

问题: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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值