c语言学习笔记(缓冲区)

文章讲述了C语言中的标准输入输出文件stdin,stdout,stderr的使用,以及缓冲区的工作原理。通过实例说明了getchar(),scanf(),printf()函数在处理输入、输出和缓冲区的影响。同时也揭示了缓冲区可能导致的问题,如提前结束输入。
摘要由CSDN通过智能技术生成

标准文件:

通常把显示器成为标准输出文件,printf 就是向这个文件输出数据(就是输出到显示器)

通常把键盘称为标准输入文件,scanf 就是从这个文件中读取数据

文件               硬件设备

stdin           标准输入文件一般指键盘,scanf() 、getchar()  等函数从stdin 获取输入

stdout         标准输出文件,一般指显示器  printf() 、putchar()  等函数默认向stdout 输出数据

stderr          标准错误文件,一般指显示器; perror() 等函数默认向stderr 输出数据

stdprn         标准打印文件,一般指打印机

缓冲区:指在程序执行时,所提供的一块存储空间(在内存中),可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取效率速度比磁盘的驱动速度快得多。

 下面示例stdin 是怎么回事,要求算出一行输入多少个字符

int main()
{
	int sum = 0;
	char ch = '0';
	while (getchar() != '\n')  
	{
		sum = sum + 1;
	}
	printf("sum : %d\n", sum);
	return 0;
}

 要想打印几行然后计算字符个数应该怎么办?

采用EOF   代表的是输入结束

int main()
{
	int sum = 0;
	char ch = '\0';
	while (getchar() != EOF)
	{
		sum++;
	}
	printf("sum : %d\n", sum);
	return 0;
}

输入完毕后输入换行符,然后同时按下CTRL + c  就可以了

当你输入abcd

              1234

               %&*(

再按下ctrl + c时  显示的是sum = 15       因为把\n 也算进去了,三行每行后面都有一个\n

但缓冲区也有缺点,看下例

int main()
{
	int x = 0;
	int sum = 0;
	char ch = '\0';
	do
	{
		printf("input a vable : \n");
		scanf_s("%d",&x);
		sum = sum + x;
		printf("是否转换(y/Y)\n");
		ch = getchar();
	} while (ch == 'y' || ch == 'Y');   //注意do{}while();  要加分号
	printf("sum : %d \n", sum);
	return 0;
}

当你输入12 按下回车时询问你是否继续,但是你想继续按y接着输入,已经给出了结果,为什么呢?

因为具有缓冲区的原因,当你输入12 按下回车,就是\n  此时\n 会存放在缓冲区里面,因此ch就从\n继续读,\n 的ASCII 值为10 ,而y/Y并不是,因此会直接结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值