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

时间:2015-10-09 13:55:02

标签: c if-statement for-loop

我的任务是打印由“非元音,元音,非元音”组成的单词列表,即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;
    }
}

输出结果如下: 1 || ba} 2 || be} etc

2 个答案:

答案 0 :(得分:5)

第一个错误就在这一行:

for (c3 = 'a'; c3 <= 'z'; c3++);

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

第二个错误在于条件的选择。条件check_vowel(c3) == 0(你所写的)不等于check_consonant(c3) == 1(你想要的)。例如,{不是元音,但并不能使它成为辅音。 修复:让您的条件变得正面。

答案 1 :(得分:0)

为什么不尝试仅针对正确的集合进行迭代:

static const char cons[] = "bcdfghjklmnpqrstvwxyz";
static const size_t cons_sz = sizeof cons - 1;

static const char vowels[] = "aeiou";
static const size_t vowels_sz = sizeof vowels - 1;

for (i = 0; i < cons_sz; i++)
    for (j = 0; j < vowels_sz; j++)
        for (k = 0; k < cons_sz; k++)
            printf("%c%c%c\n", cons[i], vowels[j], cons[k]);
相关问题