关于#c语言#的问题:#include <stdio.h>

题目要求为把第一个数组里面的元音字母提出放到第二个数组里面
switch语句不能走case里面,一直走default,而且一直不停止。

#include
int main()
{
    char str[1000];
    char vowel[1000];
    int i,l=0;
    gets(str); 
    for(i=0;str[i]!='\0';i++)
        printf("%c",str[i]);
    for(i=0;str[i]=!'\0';i++)
        {
            switch(str[i])
            {
                case'a':vowel[l]=str[i];l++;break;
                case'e':vowel[l]=str[i];l++;break;
                case'i':vowel[l]=str[i];l++;break;
                case'o':vowel[l]=str[i];l++;break;
                case'u':vowel[l]=str[i];l++;break;
                case'A':vowel[l]=str[i];l++;break;
                case'E':vowel[l]=str[i];l++;break;
                case'I':vowel[l]=str[i];l++;break;
                case'O':vowel[l]=str[i];l++;break;
                case'U':vowel[l]=str[i];l++;break;
                default:continue;
            }
        }
    return 0;
}

for(i=0;str[i]=!'\0';i++)
=!
是
!=
真是=_=!

#include <stdio.h>
int main()
{
    char str[1000];
    char vowel[1000];
    int i, l = 0;
    printf("请输入一个字符串:");
    fgets(str, 1000, stdin);    // 更改使用 fgets 函数读入字符串
    for (i = 0; str[i] != '\0'; i++)
    {
        if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u' ||
            str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U')
        {
            vowel[l] = str[i];
            l++;
        }
    }
    vowel[l] = '\0';    // 在 vowel 数组末尾添加 NULL 结尾符
    printf("元音字母为:%s\n", vowel);
    return 0;
}

在上述代码中,我们使用了 fgets() 函数来代替原先的 gets() 函数,以避免可能的缓冲区溢出漏洞。

同时,在提取元音字母的部分,我们使用 if 语句(而非原先的 switch 语句)。对于每一个字符,我们分别判断它是否是元音字母,如果是,则将其添加进新数组 vowel 中。

最后,我们在 vowel 数组末尾添加了一个 NULL 结尾符,以便后面输出。 最后得到的元音字母组成的字符串将会被输出到控制台上。

1.for循环有一个=!应该修改!=;
2.case 语句后面的参数需要空格。为了美观稍微调整下格式,修改后的代码如下所示:

#include <stdio.h>
#include <string.h>
int main()
{
    char str[50];
    char vowel[1000];
    int i,l=0;
    printf("输入字符串:");
    gets(str); 

    for(i=0;str[i]!='\0';i++)
        printf("%c",str[i]);
    for(i=0;str[i]!='\0';i++)
    {
        printf("%c",str[i]);
        switch(str[i])
        {
            case 'a':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'e':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'i':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'o':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'u':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'A':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'E':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'I':
                    vowel[l]=str[i];
                    l++;
                    break;
            case 'U':
                    vowel[l]=str[i];
                    l++;
                    break;
            default:
                    continue;
        }
    }
    printf("l=%d",l);
    return 0;
}


#include <stdio.h>  
#include <string.h>  
  
int main()  
{  
    char str[1000];  
    char vowel[1000];  
    int i,l=0;  
    int vowels[10];  
    int a_vowels=0, e_vowels=0, i_vowels=0, o_vowels=0, u_vowels=0;  
  
    gets(str);  
    for(i=0;str[i]!='\0';i++)  
        printf("%c",str[i]);  
    for(i=0;str[i]=!'\0';i++)  
        {  
            switch(str[i])  
            {  
                case'a':vowels[a_vowels]=str[i];a_vowels++;break;  
                case'e':vowels[e_vowels]=str[i];e_vowels++;break;  
                case'i':vowels[i_vowels]=str[i];i_vowels++;break;  
                case'o':vowels[o_vowels]=str[i];o_vowels++;break;  
                case'u':vowels[u_vowels]=str[i];u_vowels++;break;  
                case'A':vowels[a_vowels]=str[i];a_vowels++;break;  
                case'E':vowels[e_vowels]=str[i];e_vowels++;break;  
                case'I':vowels[i_vowels]=str[i];i_vowels++;break;  
                case'O':vowels[o_vowels]=str[i];o_vowels++;break;  
                case'U':vowels[u_vowels]=str[i];u_vowels++;break;  
                default:continue;  
            }  
        }  
    vowels[a_vowels]='\0';  
    vowels[e_vowels]='\0';  
    vowels[i_vowels]='\0';  
    vowels[o_vowels]='\0';然后,我们使用for循环遍历字符串中的每个字符,并使用switch语句来根据字符的值来更新vowels数组中的元素。  
  
最后,我们输出vowels数组中的所有元素,以便用户可以看到每个元音字母的值。
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7676589
  • 这篇博客你也可以参考下:C语言switch,case开关语句
  • 除此之外, 这篇博客: C 语言中的关键字 - 数据类型、数据修饰符及逻辑结构中的 switch case default 语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 语法:

    switch(整型变量)
    {
    	case 整型数字:
    		// 执行语句
    		break; // 必须加,否则会向下执行
    	default:
    		// 上面没有匹配到时,默认执行这里的语句
    }
    
    #include <stdio.h>
    
    int main()
    {
    	int i;
    	for (i = 0; i < 5; i++)
    	{
    		switch (i/3)
    		{
    			case 0:
    				printf("%d\n", i);
    			case 1:
    				printf("%d\n", i);
    			case 2:
    				printf("%d\n", i);
    				break;
    			default:
    				printf("this is default\n");
    		}
    	}
    }
    

    因为没加 break 会导致 switch case 贯穿,输出如下:

    0
    0
    0
    1
    1
    1
    2
    2
    2
    3
    3
    4
    4