FROM:http://hi.baidu.com/liugang585570/blog/item/084ae2ac226ecb024a36d629.html
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.