scanf()函数如何输出带空格字符串

scanf()函数如何输出带空格字符串
原创:丶无殇    时间:2019-10-13


如何让scanf()函数正确接受有空格的字符串?
如: I love you!

#include <stdio.h>
int main(void)
{
	char str[80];
	scanf("%s",str);
	printf("%s",str);
	return 0;
}

输入:
I love you!
输出:
I
上述程序并不能达到预期目的。因为scanf扫描到"I"后面的空格就认为对str的扫描结束(空格没有被扫描),并忽略后面的" love you!"。值得注意的是,我们改动一下上面的程序来验证一下:

#include<stdio.h>
#include<windows.h>
int main(void)
{
	char str[80],str1[80],str2[80];
	scanf("%s",str);/*此处输入:I love you!*/
	printf("%s\n",str);
	Sleep(5000);/*这里等待5秒,告诉你程序运行到什么地方*/
	/**
	*不是sleep(5)
	*1,函数名是Sleep不是sleep。
	*2,Windows API中,unsigned Sleep(unsigned)应该是毫秒ms.
	*/
	scanf("%s",str1);/*这两句无需你再输入,是对stdin流再扫描*/
	scanf("%s",str2);/*这两句无需你再输入,是对stdin流再扫描*/
	printf("%s\n",str1);
	printf("%s\n",str2);
	return 0;
}

输入:
I love you!
输出:
I
love
you!
好了,原因知道了,所以结论是:残留的信息 love you是存在于stdin流中,而不是在键盘缓冲区中。那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个%[]格式控制符,请看下面的程序:

#include<stdio.h>
int main(void)
{
	char str[50];
	scanf("%[^\n]",str);/*scanf("%s",string);不能接收空格符*/
	printf("%s\n",str);
	return 0;
}

详见:scanf

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值