我需要帮助来编写一个用C查找元音的循环

lnxxn5zx  于 2023-02-07  发布在  其他
关注(0)|答案(4)|浏览(133)

我需要提示用户输入一个字母。如果该字母不是元音字母,请一直提示,直到输入一个元音字母。
我期望的结果是:
输入元音:z
那不是元音。再试一次:h
那不是元音。再试一次:w
这不是元音。请重试:t
那不是元音。再试一次:o
恭喜。你选了个元音。
到目前为止,我的代码是:

do 
{
printf("Enter a vowel: ");
scanf(" %c", &letter);
}

while (letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u' && letter != 'A' && letter != 'E' && letter != 'I' && letter != 'O' && letter != 'U');
{
printf("That is not a vowel. Try again: ");
scanf(" %c", &letter);    
}

printf("Congrats. You picked a vowel!!!");
nwwlzxa7

nwwlzxa71#

你的大括号、缩进和空格都是骗人的。看起来do没有while,而while控制着它下面的块...
试试这个:

/*...*/
    while( 1 ) {
        printf( "Enter a vowel: " );

        char letter;
        if( scanf( " %c", &letter ) != 1 )
            exit( -1 );

        if( strchr( "aeiouAEIOU", letter ) != NULL ) // found!
            break;

        printf( "That is not a vowel. Try again:\n\n" );
    }
    printf( "Congrats. You picked a vowel!!!\n" );
    // NB: 'letter' has "gone out of scope".
/*...*/

strchr()在提供的字符串中搜索匹配字符,如果未找到,则返回NULL(即:在这种情况下不是元音。)
"无限循环"只能在用户提供元音时"中断"。
向print语句添加几个LF(\n)。

hpxqektj

hpxqektj2#

Do和While应该一起使用。所以你要找的代码应该类似于下面的代码。你的目标应该是确保用户在循环中直到元音被接收。你也可以通过使用元音检查函数来进一步改进代码。下面是一个例子。

do 
    {
        printf("Enter a vowel: ");
        scanf(" %c", &letter);
        if (letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u' && letter != 'A' && letter != 'E' && letter != 'I' && letter != 'O' && letter != 'U')
            printf("Sorry, Try again \n");
    } while (letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o' && letter != 'u' && letter != 'A' && letter != 'E' && letter != 'I' && letter != 'O' && letter != 'U');
    
    printf("Congrats. You picked a vowel!!!");
    }

C语言中适用的循环有do-while、for和while,没有do。

axr492tv

axr492tv3#

一旦OP的代码被正确格式化,希望OP能看到这个问题。

do {
    printf("Enter a vowel: ");
    scanf(" %c", &letter);
  } while (letter != 'a' && letter != 'e' && letter != 'i' && letter != 'o'
      && letter != 'u' && letter != 'A' && letter != 'E' && letter != 'I'
      && letter != 'O' && letter != 'U');

  {
    printf("That is not a vowel. Try again: ");
    scanf(" %c", &letter);
  }

循环中没有错误消息。

ymdaylpp

ymdaylpp4#

一个更简洁的方法是使用strchr(),正如@tadman在评论中建议的那样。

#include <stdio.h>
#include <string.h>

int main () {
    char * vowels = "aeiouAEIOU";
    char letter;
    do {
        printf("Enter a vowel: ");
        scanf(" %c", &letter);
    } while (strchr(vowels, letter) == NULL);

    printf("Congrats. You picked a vowel!!!");
}

相关问题