求助
#include <stdio.h>void Alphabet(char ch)
{
if (ch >= 'a' && ch <= 'z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'a' + 1);
}
if (ch >= 'A' && ch <= 'Z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'A' + 1);
}
if ((ch <= 'A') || (ch >= 'Z' && ch <= 'a') || (ch >= 'z'))
{
printf("%c 不是字母\n", ch);
}
}
int main()
{
char ch;
while((ch = getchar()) != EOF)
{
Alphabet(ch);
}
return 0;
}
运行出来,总是显示“不是字母”这一行,找一下原因 问题出在条件判断的逻辑上。在Alphabet函数中,第三个if语句的条件判断存在问题,导致即使输入的字符是字母,也会被判定为不是字母。正确的条件判断应该是排除字母的情况。下面是修正后的代码:
#include <stdio.h>
void Alphabet(char ch)
{
if (ch >= 'a' && ch <= 'z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'a' + 1);
}
else if (ch >= 'A' && ch <= 'Z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'A' + 1);
}
else
{
printf("%c 不是字母\n", ch);
}
}
int main()
{
char ch;
while((ch = getchar()) != EOF)
{
Alphabet(ch);
}
return 0;
}
修正后的代码中,使用了else if和else来确保只有一个条件会被执行。这样就能正确地判断输入的字符是否为字母,并输出相应的信息。 isdkz 发表于 2023-11-14 21:23
问题出在条件判断的逻辑上。在Alphabet函数中,第三个if语句的条件判断存在问题,导致即使输入的字符是字母 ...
不对
其实每次都输出 “不是字母” 是因为把换行符也给检测进去了。
换成
printf("%d 不是字母\n", ch);
可以看出它打印了 “10 不是字母”,因为换行符的 ASCII 编码就是 10 哈~
修改后的代码如下:
#include <stdio.h>
void Alphabet(char ch)
{
if (ch >= 'a' && ch <= 'z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'a' + 1);
}
if (ch >= 'A' && ch <= 'Z')
{
printf("%c 在字母表中的位置是:%d\n", ch, ch - 'A' + 1);
}
if ((ch < 'A') || (ch > 'Z' && ch < 'a') || (ch > 'z'))
{
printf("%c 不是字母\n", ch);
}
}
int main()
{
char ch;
while((ch = getchar()) != EOF)
{
if (ch != '\n') Alphabet(ch);
}
return 0;
}
页:
[1]