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(你想要的).例如,{不是元音,但这并不是一个辅音.修复:让你的条件积极.