简单小疑点
简单小问题
大家试运行一下下面这个简单的小程序,在我还没输入字符串的时候就结束运行了。我知道可以在scanf( "%d ",&i);后面加上getchar();语句来解决这个问题。但是我想知道
(1)原程序为什么在没输入字符串的时候就结束运行
(2)为什么在提示的地方放上getchar();可以运行,而放在别的地方不行?例如放 在gets(b);后
void main()
{
int i = 0;
char b[20];
scanf( "%d ",&i);
//此处加上getchar();语句来解决这个问题
if(i == 1)
{
printf( "enter the name of the book: ");
gets(b);
printf( "%s\n ",b);
}
else
{
printf( "----------------------------------------------- ");
}
return;
}
------解决方案--------------------
道理其实很简单,楼上说的也很对。
getchar()的作用是向缓存中输入一个字符。它一般用于清空一个回车符,就像你的这个题一样,清空回车后就可以让gets()读取自己的数据流,否则gets()将scanf()后的回车读取就直接跳出了。
在scanf()中,遇到一下情况认为这个数据输入结束:
1、空格、回车或tab键
2、按指定的宽度结束
3、遇到非法输入
所以在你这个情况下,scanf后的回车只表示输入的结束,而没有将回车读入scanf中,所以回车被留到gets里了,gets遇到回车就自然跳出了!
呵呵,其实我是一个刚刚接触走出校园,参加工作的职场新人,很多东西都不会,以上的观点是我这段时间来的积累,希望对你有所帮助,在我看来,输入输出在c的学习和实际工作中是十分有必要的,好好学!
------解决方案--------------------
scanf( "%d ",&i);
//此处加上getchar();语句来解决这个问题
if(i == 1)
-------------------------------------------
不是只能加在这里,getchar()只要加在gets()前面的任何地方都行!目的就是把键盘输入流(stdin)里面的回车符清除,免的被gets读到(gets的作用是:从标准输入流读取字符串并回显,读到回车符时退出),当然也可以用更直接的清除输入流的函数fflush(stdin)来解决。
大家试运行一下下面这个简单的小程序,在我还没输入字符串的时候就结束运行了。我知道可以在scanf( "%d ",&i);后面加上getchar();语句来解决这个问题。但是我想知道
(1)原程序为什么在没输入字符串的时候就结束运行
(2)为什么在提示的地方放上getchar();可以运行,而放在别的地方不行?例如放 在gets(b);后
void main()
{
int i = 0;
char b[20];
scanf( "%d ",&i);
//此处加上getchar();语句来解决这个问题
if(i == 1)
{
printf( "enter the name of the book: ");
gets(b);
printf( "%s\n ",b);
}
else
{
printf( "----------------------------------------------- ");
}
return;
}
------解决方案--------------------
道理其实很简单,楼上说的也很对。
getchar()的作用是向缓存中输入一个字符。它一般用于清空一个回车符,就像你的这个题一样,清空回车后就可以让gets()读取自己的数据流,否则gets()将scanf()后的回车读取就直接跳出了。
在scanf()中,遇到一下情况认为这个数据输入结束:
1、空格、回车或tab键
2、按指定的宽度结束
3、遇到非法输入
所以在你这个情况下,scanf后的回车只表示输入的结束,而没有将回车读入scanf中,所以回车被留到gets里了,gets遇到回车就自然跳出了!
呵呵,其实我是一个刚刚接触走出校园,参加工作的职场新人,很多东西都不会,以上的观点是我这段时间来的积累,希望对你有所帮助,在我看来,输入输出在c的学习和实际工作中是十分有必要的,好好学!
------解决方案--------------------
scanf( "%d ",&i);
//此处加上getchar();语句来解决这个问题
if(i == 1)
-------------------------------------------
不是只能加在这里,getchar()只要加在gets()前面的任何地方都行!目的就是把键盘输入流(stdin)里面的回车符清除,免的被gets读到(gets的作用是:从标准输入流读取字符串并回显,读到回车符时退出),当然也可以用更直接的清除输入流的函数fflush(stdin)来解决。