码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-25 19:42:46      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:bubuko   运行   分享   输入数据   内存   \n   image   put   span   

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\n这几个字符, getchar获取的获取的是e这个字符,然后调用putchar输出e。所以最后的结果是he。

 

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

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

运行结果:

技术分享图片

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

 

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

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

标签:bubuko   运行   分享   输入数据   内存   \n   image   put   span   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!