scanf遇到空格继续输入
来源:互联网 发布:手机html教程软件 编辑:程序博客网 时间:2024/04/29 03:23
#include <stdio.h>
int main()
{
char str[80];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:I love you!
上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:
#include <stdio.h>
#include<windows.h>
int main()
{
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,C/C++中,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()
{
char str[50];
scanf("%49[^\n]", str); /* scanf("%s",string); 不能接收空格符 */
printf("%s\n", str);
return 0;
}
- scanf遇到空格继续输入
- 两种方法让scanf遇到空格继续输入字符串
- scanf遇空格后继续输入
- scanf()是否忽略空格输入?
- 切记scanf再输入字符的时候遇到空格是认为结束的,若有空格请用gets输入
- scanf怎样才能输入带空格字符串?
- scanf输入含有空格的字符串
- C语言 scanf输入回车或空格时停止输入
- c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题
- scanf获取一个句子 解决遇到空格结束
- 如何用scanf()输入带空格的我爱你
- scanf()函数如何输入一个带空格的字符串函数
- scanf函数输入字符 %c之前要有空格分析
- strlen()不能算出scanf输入字符串的空格问题
- scanf()函数实现输入带有空格的字符串
- 用scanf()函数输入带空格的字符串
- 处理格式化输入函数scanf遇空格停止问题
- 使用scanf字符输入时遇到的问题
- unity3d camera.culling mask
- 异常处理
- 模式识别作业2
- HiHo #1032 : 最长回文子串 【Manacher算法】
- Leetcode||9. Palindrome Number
- scanf遇到空格继续输入
- 函数、指针
- 总结
- Java多线程(三):线程栈模型与线程的变量
- 11 奇偶数分离
- Qt--基于UDP的网络广播
- iMX6Q开发环境搭建ycoto Linux3.10.53BSP
- tyvj1125 JR‘s chop
- Object