问题如下:编写一个程序,可以一直接收键盘字符,
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++程序,该程序接收用户输入并进行字符大小写的转换。当接收到小写字母时,程序输出对应的大写字母;反之,接收到大写字母时,输出小写字母。同时,对于数字输入则不作处理。由于getchar()函数可能导致输入缓冲区的问题,作者通过循环读取并丢弃缓冲区内容来清空它,确保正确处理用户输入。程序中使用了一个虚拟的结束符号 '@' 来终止循环。
1540

被折叠的 条评论
为什么被折叠?



