问题如下:编写一个程序,可以一直接收键盘字符,
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;
}
正常结果: