关于Scanf和gets函数的讨论
来源:互联网 发布:票务平台知乎 编辑:程序博客网 时间:2024/05/16 11:18
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用格式为:
gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认
为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。
char string[15];
gets(string); /*遇到回车认为输入结束*/
scanf("%s",string); /*遇到空格认为输入结束*/
所以在输入的字符串中包含空格时,应该使用gets输入。
注意:实际使用scanf()函数时存在一个问题.
1.举例说明:
当使用多个scanf()函数连续给多个字符变量输入时, 例如:
main()
{
char c1, c2;
scanf("%c", &c1);
scanf("%c", &c2);
printf("c1 is %c, c2 is %c", c1, c2);
}
2.运行结果:
//////////////////////////////////////////////////////////
h //输入h,然后回车
c1 is h, c2 is
Press ENTER to continue.
////////////////////////////////////////////////////////
hi //输入hi,然后回车
c1 is h, c2 is i
Press ENTER to continue.
3.结果分析:
运行该程序, 输入一个字符h后回车 (要完成输入必须回车), 在执行scanf("%c", &c1)时, 给变量c1赋值"h", 但回车符仍然留在缓冲区
内, 执行输入语句scanf("%c", &c2)时, 变量c2输出的是一空行(c2的值为回车字符分ASCII码——0x0a), 如果输入hi后回车, 那么输出结果
为:c1 is h, c2 is i。
4.解决方法:
要解决以上问题, 可以在输入函数前加入清除函数fflush()。修改以上程序变成:
#include<stdio.h>
main()
{
char c1, c2;
scanf("%c", &c1);
fflush(stdin); //清除输入缓冲区(清除掉第一次的回车)
scanf("%c", &c2);
fflush(stdin); //清除输入缓冲区(清除掉第二次的回车)
printf("c1 is %c, c2 is %c", c1, c2);
}
/////////////////////////////////////////////////////////////////
运行:
r //输入r,然后回车
t //输入t,然后回车
c1 is r, c2 is t
Press ENTER to continue.
- 关于Scanf和gets函数的讨论
- 关于gets和scanf函数
- 关于gets()函数和scanf()函数的区别
- C语言中关于gets和scanf函数的理解
- gets() 和scanf()函数
- C语言输入中对scanf和gets的讨论
- C语言输入中对scanf和gets的讨论
- gets和scanf函数的区别
- gets和scanf函数的区别
- gets和scanf函数的区别
- gets和scanf函数的区别[转]
- gets和scanf函数的区别
- gets和scanf函数的区别
- scanf()函数和gets()函数
- 关于scanf和gets函数共用时出现的一些问题的解释
- c语言scanf()函数和gets()函数的区别
- 论scanf函数和gets函数的微妙关系
- VS2012关于scanf和gets的不安全问题
- PHP程序(Discuz和drupal等)安装时记忆空间分配错误解决方法
- 关于中文乱码问题的一些解决方案和经验
- QTP
- 用户登录安全验证模块代码测试
- linux学习进阶
- 关于Scanf和gets函数的讨论
- 西班牙Suvil 魔指鼠标,挺有个性
- cuda的dll开发流程
- 纯C小练习之模拟循环缓冲区
- umount: device is busy时怎么办?
- Optimizing C and C++ Code
- Hibernate二级缓存
- FAQ_EL表达式在页面中无法使用
- 用户控件 UserControl类