小羊爱吃小草 发表于 2023-11-14 21:29:27

悬赏

#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;
}

这个代码运行后总是多出一行“不是字母”,哪里出了问题

小甲鱼 发表于 2023-11-14 21:29:28

修改后的代码如下:

#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;
}

isdkz 发表于 2023-11-14 21:29:35

问题出在输入的字符中包含了换行符(\n),这会导致程序判断为不是字母而多输出一行“不是字母”。

为了解决这个问题,可以在 main 函数中加入判断,如果输入的是换行符,则直接跳过调用 Alphabet 函数,不进行处理。修改后的 main 函数如下所示:

int main()
{
    char ch;
    while ((ch = getchar()) != EOF)
    {
      if (ch != '\n') // 如果输入不是换行符
      {
            Alphabet(ch);
      }
    }

    return 0;
}


通过这样的修改,就可以避免多输出一行“不是字母”的问题了。

小甲鱼 发表于 2023-11-14 23:18:09

其实每次都输出 “不是字母” 是因为把换行符也给检测进去了。

换成

printf("%d 不是字母\n", ch);
可以看出它打印了 “10 不是字母”,因为换行符的 ASCII 编码就是 10 哈~

页: [1]
查看完整版本: 悬赏