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