C while循环 - 代码不起作用

时间:2012-03-28 02:51:27

标签: c

我一直在写一个简单的程序来检查输入字母是否是元音,而我的代码不起作用。 程序应逐个输入字符作为输入,直到输入%,这将使其退出。它检查输入字符是否为元音,并打印结果。如果输入不是字母,它也会报告错误。 问题是,它在第​​二步中突破了循环。 提前谢谢你的帮助。 PS对不起,没有写出没有错误消息,它只是突破了循环。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
  char processed='q';
  while(processed != '%')
  {
    printf("Enter letter to check if it's a vowel, %% to quit.\n");
    char input = getchar();
    processed = tolower(input);
    printf("%c\n", processed);
    if (processed == '%')
      break;
    if (processed < 'a' || processed > 'z')
    {
      fprintf(stderr, "Input should be a letter\n");
      exit(1);  
    }
    switch(processed)
    {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
      case 'y':
        printf ("Vowel\n");
        break;
      default:
        printf ("Non-vowel\n");
    }
  }
  exit(0);
}

2 个答案:

答案 0 :(得分:5)

据推测,您正在输入一个角色,然后点击[ENTER]。因此,实际上您输入了两个字符 - 您输入的字母和换行符(\n)。第二次循环你得到换行符并发现它不是一个字母,所以你遇到了错误的情况。也许你想要添加如下内容:

if (processed == '\n') {
    continue;
}

答案 1 :(得分:3)

有人提到你在输入的每个字母后输入,然后在你的程序中发送换行符('\ n')。由于你的程序没有处理它的情况,它无法正常工作。

您可以添加代码来处理换行符,但使用scanf会更容易。具体来说,如果你更换了

char indent = getchar();

char indent;
scanf("%c\n", &indent);

scanf()将处理换行符并返回您感兴趣的字母。

当然,你应该检查scanf()的错误返回值。