内存缓冲区的存在 && 如何读取缓冲区中的字符(换行符等其他字符)

一、了解编译器是怎样输入输出的

 

输入:用户从终端或编译器上输入内容,内容输入到缓存区中去,从缓存区中读取,并将其存储到内存中

输出:刚好和输入是反过程

二、输入缓冲区

输出并不是一步完成的,首先将内容输入到缓冲区中,然后从缓冲区中读取内容

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {

	int m=4;
	char c;
	int n = 2;
	printf("%d", (n != 0) ? 1 : 0);
	printf("%c%c\n", 245, 235);
	while (1)
	{
		printf("请输入一个整数:");
		scanf("%d", &m);
		printf("%d是一个%s数和%s数----%d\n", m, 
					(0 == m % 2 ) ? "偶" : "奇", 
					(m >= 0) ? "正":"负",
					(m !=n)?1:0);
		
		//scanf("%*c");          //读取一个任意字符  换行也是一个字符,
							     //若不读取,会影响下面的结果
		printf("请输入一个字符:");
		scanf("%c", &c);
		
		if (c >= 'a' && c <= 'z') {
			printf("这是小写字母~~\n\n");
		}
		else if (c >= 'A' && c <= 'Z') {
			printf("这是大写字母~~\n\n");
		}
		else
			printf("这是一个数字~~\n");
		int n = 0;
		int sum = 1;
		printf("请输入一个数:");
		scanf("%d", &n);
		for (int i = 1; i <= n; i++) {
			sum *= i;
		}
		printf("1到%d的阶乘为: %d\n\n",n , sum);
	}

	


	
	return 0;
}

若是不加 scanf("%*c");

结果为:---直接跳过 “请输入一个字符”  的输入

 原因:输入3回车后,输入缓冲区中此时有3和回车符号,前面只读取了一个数字3,回车符号并没有读取。请输入一个字符时,此时自动读取了回车符号。所以此时为了能够正常输入一个字符,需要把前一个输入时的回车读取。-----这里注销那行代码注释就可以正常输入了

三、如何读取缓冲区内的字符 

读取缓冲区内的字符有以下几种方法:

                        scanf("%c",&c);

                        getchar();

                        scanf("%*c");

                        scanf("%*c[^'\0']%*c");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值