C 如何打印辅音多于元音的字符串?

C 如何打印辅音多于元音的字符串?,c,arrays,string,for-loop,char,C,Arrays,String,For Loop,Char,输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次 我相信问题出在我的if循环中,但不知何故我无法理解为什么它不能正常工作。它打印我输入的每个字符串 这是我写的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char string[20][50]; int i, j;

输入20个字符串的数组。制作一个程序,打印出辅音多于元音的字符串,其中字母“r”至少重复3次

我相信问题出在我的if循环中,但不知何故我无法理解为什么它不能正常工作。它打印我输入的每个字符串

这是我写的代码:

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


    int main(void) {

    char string[20][50];
    int i, j;
    int vowels=0;
    int consonants=0;
    int repeated_r=0;

    printf("Enter the array of 20 strings:\n");

    for(i=0;i<20;i++){
        gets(string[i]);
        }

    for(i=0;i<20;i++){
        for(j=0;j<50;j++){

            if(string[i][j] == 'r'){
                repeated_r++;
            }
            else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
                vowels++;
            }
            else{
                consonants++;
            }

        }
        if(consonants>vowels && repeated_r>=3){

            fflush(stdin);
            puts(string[i]);
        }
    }


    return 0;
}    

#包括
#包括
#包括
内部主(空){
字符串[20][50];
int i,j;
int元音=0;
int辅音=0;
int重复r=0;
printf(“输入20个字符串的数组:\n”);

对于(i=0;i您需要在处理每个字符串后重置计数器

不要使用
get
而是使用
fgets

for(i=0;i<20;i++){
    for(j=0;j<50;j++){

        if(string[i][j] == 'r'){
            repeated_r++;
        }
        else if(string[i][j] == 'a' || string[i][j] == 'e' || string[i][j] == 'i' || string[i][j] == 'o' || string[i][j] == 'u'){
            vowels++;
        }
        else{
            consonants++;
        }

    }
    if(consonants>vowels && repeated_r>3){

        fflush(stdin);
        puts(string[i]);
    }

   //Reset the counters
    consonants =0;
    vowels =0;
    repeated_r =0;
  }
 }
(i=0;i3)的
{
fflush(stdin);
puts(字符串[i]);
}
//重置计数器
辅音=0;
元音=0;
重复r=0;
}
}

还请注意,在当前代码中,
r
不被视为辅音。

您没有重置外部循环中变量的初始值

int vowels=0;
int consonants=0;
int repeated_r=0;
还有内部循环中的条件

for(j=0;j<50;j++){
        ^^^^
具有未定义的行为

我可以建议以下解决方案,如下面的演示程序所示

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

int main( void ) 
{
    enum { M = 3, N = 50 };
    char s[M][N];

    for ( size_t i = 0; i < M; i++ )
    {
        fgets( s[i], N, stdin );
        s[i][strcspn( s[i], "\n" )] = '\0';
    }

    const char *vowels = "aeiou";
    const char r = 'r';

    for ( size_t i = 0; i < M; i++ )
    {
        size_t repeated_r = 0;
        size_t vowels_count = 0;
        size_t n = strlen( s[i] );

        for ( size_t j = 0; j < n; j++ )
        {
            repeated_r += s[i][j] == r;
            vowels_count += strchr( vowels, s[i][j] ) != NULL;
        }

        if ( repeated_r >= 3 && vowels_count < n - vowels_count )
        {
            puts( s[i] );
        }
    }

    return 0;
}
然后程序输出可能如下所示

errors

您的代码中还有一个问题,ypu正在使用gets。它还将包含空格,因此如果您的字符串为“\uu\rrrbaeeeiou”。它将打印此字符串,但实际上不应打印此字符串。 请注意,“”表示空白。 根据你的代码,“Y”将被计算在辅音中,即使在你的字符串中有4个辅音(3 R和1 B)和8个元音,它将打印这个字符串作为输出,因为空白空间将被计算为辅音。
此外,在您的代码中,r不算作辅音

r
是辅音,因此如果您有单词
Totalteer
,则不会打印它,因为您将计算3个
r
,4个元音和2个辅音
    Hello World
    errors
    photosynthesis_bro
errors