一个和scanf和getchar()相关的问题
int main()
{
int a,b;
scanf( "%d ",&a);
b = getchar()
printf( "a = %d, b=%d ",a,b);
return 0;
}
程序运行时,输入2,回车,结果会打印出a =2,b=10,这是怎么回事
用getch()则没有问题
[解决办法]
int main()
{
int a,b;
scanf( "%d ",&a);
fflush(stdin);
b = getchar();
printf( "a = %d, b=%d ",a,b);
return 0;
}
[解决办法]
//例一:这个例子是为了说明getch()和getche()的区别
#include <stdio.h>
#include <conio.h>
//这里讲个小故事:因为这个代码是在别人网页上的,别人用的C环境,可能是不需要conio.h头文件
//就可以用getch();(我就不清楚了),也可能是忘了写,网页上的源代码没有#include <conio.h> 这一行,
void main()
{
char c, ch;
c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
putchar(c); /*输出该字符*/
ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(ch);
printf( "\n\n ");
}
--------------------------------------
//例二:这个例子是演示交互输入的过程中完成暂停功能
#include <stdio.h>
#include <conio.h>
void main()
{
char c, s[20];
printf( "Name: ");
gets(s);
printf( "Press any key to continue...\n\n ");
getch(); /*等待输入任一键*/
printf( "\n\n ");
}
--------------------------------------
//例三:getchar()函数也是从键盘上读入一个字符,并带回显。它与前面两个函数的区别在于:
// getchar()函数等待输入直到按回车才结束,回车前的所有输入字符都会逐个显示在屏幕上。
// 但只有第一个字符作为函数的返回值。
#include <stdio.h>
#include <conio.h>
void main()
{
char c;
c=getchar(); /*从键盘读入字符直到回车结束*/
//getchar()在这里它只返回你输入字符串的第一个字符,并把返回值赋值给c
putchar(c); /*显示输入的第一个字符*/
printf( "\n\n ");
}
--------------------------------------
//例四:呵呵,这个程序你运行一下,相信你又会有疑问了
#include <stdio.h>
#include <conio.h>
void main()
{
char c;
while ((c=getchar())!= '\n ') /*每个getchar()依次读入一个字符*/
printf( "%c ",c); /*按照原样输出*/
printf( "\n\n ");
}
--------------------------------------
例四的程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字符串都输出来了,咦,你不是说getchar()只返回第一个字符么,这里怎么?
因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到不满足循环条件退出为止。例子中循环条件里的 '\n '实际上就是你输入字符串后的回车符,所以意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入直到按回车才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如while ((c=getchar())!= 'a '),什么意思呢,意思就是遇到字符 'a '就停止循环。
[解决办法]
标准流的缓存没有刷新
[解决办法]
int main()
{
int a,b;
scanf( "%d ",&a);
b = getchar()
printf( "a = %d, b=%d ",a,b);
return 0;
}
程序运行时,输入2,回车,结果会打印出a =2,b=10,这是怎么回事
用getch()则没有问题
------------------------------------------------
输入2,回车,这输入了两个字符,第一个字符是2由scanf()来接受,第二个字符是 '\n '(它的ASCII码是10)由getchar来接受。
scanf为什么会将回车作为输入保存到缓存里面呢,一般而言回车作为输入的结束标志啊
---------------------------------------------
不要忘记 回车符 也是一个字符啊,当你敲了回车后,自然也会像其他字符那样要保存在缓存的。