c语言标准输入和scanf的关系

int a
scanf("%d",&a);

 什么意思,是从键盘读取一个数字存放到a中。错,scanf和所有从键盘获取输入数据的函数都不是直接从键盘获取数据的,而是从“标准输入”获取数据的,如果标准输入没有数据,才让用户从键盘输入数据的。

当程序提示我们输入数据的时候实际上发生了这样的过程:

键盘数据----------缓冲区----------标准输入

缓冲区你可以理解为程序分配的一块内存空间,标准输入你可以理解为另外一块内存空间

你有没有发现在调用scanf输入数据的时候我们是可以编辑输入数据的,本想输入数字,结果输入了字母,可以按退格键,重新输入的,那么这些字符就被输入到了缓冲区里面了,直到按下回车之后,缓冲区的数据连同最后输入的回车一起被写到标准输入里面取了。然后scanf从标准输入读取数据。

	char ch;

	ch = getchar();
	putchar(ch);

	ch = getchar();
	putchar(ch);

看下上面这段代码,getchar意思是从标准输入获取一个字符,但是我输入的是hello 共5个字符,当我按下回车的时候,这5个字符连同回车一同被写入到了标准输入中,putchar是从标准输入获取一个字符输出,默认是第一个字符,那么自然会输出h

然后下面我又调用 getchar(),这次还要从键盘读取输入数据吗? 不需要,是直接从标准输入读取的数据,由于标准输入现在是hello 这几个字符, getchar获取的获取的是e这个字符,然后调用putchar输出e。所以最后的结果是he。

我写了一个程序来把标准输入的数据放到输入中。

	char ch;
	char test[10] = {0};
	int x=0;
	while(x<6)
	{
		ch = getchar();
		test[x] = ch;
		x++;
	}

运行结果:

可以看到标准输入的最后一个字符是

getchar scanf这些输入函数并不限制你输入字符的个数,实际上你想输入多少个字符都可以,只是当你按下回车的时候,所有缓冲区的数据被写入到标准输入里面,然后getchar从标准输入从里面读一个字符,scanf从标准输入读一个数字、一个字符、一个字符串。

以前一直觉得getchar调用一次就从键盘输入一次数据,并不是这样的。

原文地址:https://www.cnblogs.com/yfish/p/9851689.html