悬赏
#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;
}
这个代码运行后总是多出一行“不是字母”,哪里出了问题 修改后的代码如下:
#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;
} 问题出在输入的字符中包含了换行符(\n),这会导致程序判断为不是字母而多输出一行“不是字母”。
为了解决这个问题,可以在 main 函数中加入判断,如果输入的是换行符,则直接跳过调用 Alphabet 函数,不进行处理。修改后的 main 函数如下所示:
int main()
{
char ch;
while ((ch = getchar()) != EOF)
{
if (ch != '\n') // 如果输入不是换行符
{
Alphabet(ch);
}
}
return 0;
}
通过这样的修改,就可以避免多输出一行“不是字母”的问题了。 其实每次都输出 “不是字母” 是因为把换行符也给检测进去了。
换成
printf("%d 不是字母\n", ch);
可以看出它打印了 “10 不是字母”,因为换行符的 ASCII 编码就是 10 哈~
页:
[1]