c - 三个输入字符的比较不正确
问题描述
我有以下程序,它比较三个字符并输出它们的比较。
当我运行程序时,每当我输入三个整数时,只有最后一个 else(所有首字母都不同)语句在其条件下正确运行。但是,对于其他条件,只有最后一个 else if(第一个和最后一个首字母相同)运行。我在添加花括号后也检查了它,但没有任何改变。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch1, ch2, ch3;
printf("Enter 3 character values into ch1, ch2, and ch3: ");
scanf("%c%c%c", &ch1, &ch2, &ch3);
if(ch1==ch2)
{
if(ch2==ch3)
printf("All initials are the same!\n");
else
printf("First two initials are the same!\n");
}
else if(ch2==ch3)
{
printf("Last two initials are the same!\n");
}
else if(ch1==ch3)
{
printf("First and last initials are the same!\n");
}
else
{
printf("All initials are different!\n");
}
system("pause");
return 0;
}
解决方案
您发布的代码工作得很好,只要您不在输入的首字母之间输入任何空格字符!(我用AAA
、AAB
、ABA
、ABB
和对其进行了测试ABC
,并且都给出了正确的响应。)
但是,如果您要在首字母之间输入空格(即 enter A A B
),那么空格字符将被读取为输入(这就是%c
格式说明符的工作方式),因此,在这种情况下,三个首字母实际上将是A
,
并且A
– 给出一个看似不正确的答案。
要在输入之间跳过(可选)空白字符,只需在每个%c
格式说明符之间添加一个空格,如下所示:
scanf("%c %c %c", &ch1, &ch2, &ch3);
推荐阅读
- python - 使用 PyCharm 时出现 ModuleNotFoundError
- c# - 指定网络名称的格式无效:系统重新启动时出现 HTTPListener 错误
- c# - 如何将这个不安全的 DLL 调用重构为在 C# 中使用 IntPtr 的调用
- c# - C# 将字符串从文本框转换为 Int
- facebook - 如何在 Facebook API (get_insights) 方法中获取所有可用的字段名称?
- windows - Windows:为 Jenkins 代理自动检测、条带化、预置、挂载 AWS EC2 临时磁盘
- nginx - nginx auth_request 指令和带有 set 的位置块的问题
- python - 为什么我的数据框会在我执行 groupby 时删除一个列?(正在删除的列是我用来分组的列之一)
- javascript - 中心的文本和右端的图标
- unreal-engine4 - 我可以在 UE4 上为 SteamVR(HTC Vive + Valve Index)和 Oculus Quest (2) 开发跨平台 VR 应用程序吗?