记录下,由输入缓冲区导致的问题------编写一个程序,可以一直接收键盘字符,1、如果是小写字符就输出对应的大写字符,2、如果接收的是大写字符,就输出对应的小写字符,3、如果是数字不输出。

该博客介绍了如何编写一个C/C++程序,该程序接收用户输入并进行字符大小写的转换。当接收到小写字母时,程序输出对应的大写字母;反之,接收到大写字母时,输出小写字母。同时,对于数字输入则不作处理。由于getchar()函数可能导致输入缓冲区的问题,作者通过循环读取并丢弃缓冲区内容来清空它,确保正确处理用户输入。程序中使用了一个虚拟的结束符号 '@' 来终止循环。
摘要由CSDN通过智能技术生成

问题如下:编写一个程序,可以一直接收键盘字符,
1、如果是小写字符就输出对应的大写字符,
2、如果接收的是大写字符,就输出对应的小写字符,
3、如果是数字不输出。

#include<stdio.h>
int main()
{
	char a = '0';
	while (1)
	{
		printf("请输入:");
		a = getchar();//会有个回车键在输入缓冲区,下一次访问会直接被读取。
		if ('a' <= a && a <= 'z')
		{
			printf("%c\n", a - 32);
		}
		else if('A' <= a && a <= 'Z')
		{
			printf("%c\n", a + 32);
		}
		/*else if (a == '1');
		{
			break;
		}*/
	}
	return 0;
}

问题所在:使用getchar函数时候,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当程序下次访问时,输入缓冲区内的回车支付就被直接读取走了。

或者如果用户输入多个字符那么,下次就会直接读取下一个字符。

故,输出结果如下:

更正方法为,使用清空输入缓冲区。在我查询到清空方法主要有四种。(C/C++ 四种清空输入缓冲区的方法见文章最后)

采用循环读取缓冲区内容的方法。

int main()
{
	char a = '0';
	while (1)
	{
		printf("请输入:");
		a = getchar();//会有个回车键在输入缓冲区,下一次访问会直接被读取。
		//约定一个结束符号
        if (a == '@')
		{
			break;
		}
		else if ('a' <= a && a <= 'z')
		{
			printf("%c\n", a - 32);
		}
		else if('A' <= a && a <= 'Z')
		{
			printf("%c\n", a + 32);
		}

        //清空输入缓冲区
		char c;
		while ((c = getchar()) != '\n');
	
	}
	return 0;
}

正常结果: 

 参考:C/C++ 四种清空输入缓冲区的方法_cpp_learner的博客-CSDN博客_c++清空输入缓冲区

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值