使用for循环打印特定的"非元音,元音,非元音"字样

Fin*_*a_C 0 c for-loop if-statement

我有一个任务是打印由"非元音,元音,非元音"组成的单词列表,即bab,bac,bad,bad ......到zuz.

我设法创建了一个代码,它执行前两个字母但在最后一个循环中丢失并仅打印'}' - 这对我来说似乎很奇怪.代码如下:

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


int check_vowel(char c);
int check_consonant(char c);
int main ()
{

char c, c2, c3;
int cnt;

for (cnt = 0; cnt <= c; cnt++)
{
    for (c = 'a'; c <= 'z'; c++)
    {
        if (check_vowel(c) == 0)
        {           
            for (c2 = 'a'; c2 <= 'z'; c2++)
            {
                if (check_consonant(c2) == 0)
                {
                    for (c3 = 'a'; c3 <= 'z'; c3++);
                    {
                        if (check_vowel(c3) == 0)
                        {
                        cnt++;
                        printf("%d || %c%c%c\n", cnt, c, c2, c3);
                        }
                    }
                }       
            }
        }
    }
}



printf("Total names = %d", cnt);

return 0;

}

int check_vowel(char c)

{
    switch(c) 
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    return 1;
        default:
    return 0;
    }
}

int check_consonant(char c)
{
    switch(c)
    {
    case 'b':
    case 'c':
    case 'd':
    case 'f':
    case 'g':
    case 'h':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'v':
    case 'w':
    case 'x':
    case 'y':
    case 'z':
        return 1;
    default:
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

产出如下: 1 || ba} 2 || be} etc

小智 5

第一个错误在这一行:

for (c3 = 'a'; c3 <= 'z'; c3++);
Run Code Online (Sandbox Code Playgroud)

由于该行末尾的分号,迭代体是"什么都不做".它之后的代码块(从{})在这个循环之后被视为要做的事情.当您输入此代码块时,c3将始终是{,因为它是之后的第一个字符z(在大多数字符编码中).修复:删除分号.

第二个错误在于条件的选择.条件check_vowel(c3) == 0(你写的)不等于check_consonant(c3) == 1(你想要的).例如,{不是元音,但这并不是一个辅音.修复:让你的条件积极.