一、起因
在C语言课上老师讲了一个例子
题目:输出两个整型数中的最大值
相信很多人都碰到过这题,这个题为 张玉生《C语言程序设计》的例1.1
代码如下:
#include <stdio.h>
int main()
{
int a, b, c;
int max(int, int);
printf("请输入第一个整数:");
scanf("%d", &a);
printf("请输入第二个整数:");
scanf("%d", &b);
c=max(a,b);
printf("整数%d和整数%d的最大值是:%d\n", a, b, c);
return 0;
}
int max(int x, int y)
{
int z;
if (x > y)
z = x;
else
z = y;
return z;
}
那么老师的问题来了
请把上述代码改为:输出两个字符型中的最大值
即:比较两个字母的大小
#include <stdio.h>
int main()
{
char a, b, c;
int max(char, char);
printf("请输入第一个字母:");
scanf("%c", &a);
printf("请输入第二个字母:");
scanf("%c", &b);
c=max(a,b);
printf("字母%c和字母%c的最大值是:%c\n", a, b, c);
return 0;
}
int max(char x, char y)
{
int z;
if (x > y)
z = x;
else
z = y;
return z;
}
二、出现问题
由于前面的输入缓冲区中还有换行符、空格或其他无效字符的残留,导致scanf函数在读取字符时会读取到这些无效字符。出现以下情况
这是因为%c在读取字符时会读取缓冲区中下一个字符,而不管是否为空格、回车等。
三、解决方案
解决这个问题的方法是
1、在%c前面加一个空格,如scanf(" %c", &a),这样会让scanf函数跳过任何无效字符,只读取有效字符。
#include <stdio.h> int main() { char a, b, c; int max(char, char); printf("请输入第一个字母:"); scanf(" %c", &a); printf("请输入第二个字母:"); scanf(" %c", &b); c = max(a, b); printf("字母%c和字母%c的最大值是:%c\n", a, b, c); return 0; } int max(char x, char y) { int z; if (x > y) z = x; else z = y; return z; }
结果为:
2、使用scanf函数读取字符时,可以使用getchar函数来消耗掉换行符或其他无效字符,以便确保scanf函数读取到正确的字符。
例如,可以在输入a后面添加getchar()语句,如scanf("%c", &a); getchar();,这样就可以消耗掉换行符或其他无效字符。#include <stdio.h> int main() { char a, b, c; int max(char, char); printf("请输入第一个字母:"); scanf("%c", &a); getchar(); // 清空输入缓冲区 printf("请输入第二个字母:"); scanf("%c", &b); c=max(a,b); printf("字母%c和字母%c的最大值是:%c\n", a, b, c); return 0; } int max(char x, char y) { int z; if (x > y) z = x; else z = y; return z; }
四、总结
这是我第一次发博客,由于本人刚接触C语言,有很多东西还不是很理解,可能出现很多错误,若发现,请不吝发言指正。
若对你有帮助的话,请点赞 收藏 关注 吧!!!