C程序,在连续切换菜单循环中的case内的数组

7gyucuyw  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(98)

当用户输入超过array[4]时,循环Switch Menu中case 4内的数组不打印/显示最后一个数组的值。
我试着把case 4拿出来,让它成为一个单独的程序来检查它是否真的不能自己工作,但它工作得很好,但当我把它放回Switch时,同样的问题再次出现。我想可能是初始化部分的问题。帮助
`

#include <stdio.h>

int main ()
{
  char first[20],last[20];
  float math,eng,sci,avg;
  int a,b,c,d,diff,array[diff],e,i,input;
  
  do{
        printf("\nMAIN MENU\n");
    
        printf("[1] Basic Input Output\n[2] Conditional Statement\n[3] Looping Construct\n[4] Array\n[5] About\n[6] Exit");
        printf("\n\nChoose: ");
        scanf("%d",&input);
        printf("\n");
        
    switch (input)
        {
        case 1:
                printf("\nEnter your given name:");
                scanf("%s",first);
                printf("Enter your surname:");
                scanf("%s",last);
                printf("\nHello %s %s!\n",first,last);
        break;
        case 2: 
                printf("\nEnter your grade in Math:");
                scanf("%f",&math);
                printf("\nEnter your grade in Science:");
                scanf("%f",&sci);
                printf("\nEnter your grade in English:");
                scanf("%f",&eng);
    
                avg=(math+eng+sci)/3;
    
                if(math>eng&&sci)
                {
                    printf("\nHighest grade is in: Math");
                }
                if(eng>math&&sci)
                {
                    printf("\nHighest grade is in: English");
                }
                if(sci>eng&&math)
                {
                    printf("\nHighest grade is in: Science");
                }
                if(math==eng)
                {
                    printf("\n--Math and English tied grades--");
                }
                if(math==sci)
                {
                    printf("\n--Math and Science tied grades--");
                }
                if(eng==sci)
                {
                    printf("\n--Science and English tied grades--");
                }
    
                printf("\nYour average in 3 subjects:%f\n",avg);
        break;
        case 3:
                printf("Enter beginning number: ");
                scanf("%d",&b);
                printf("Enter ending number: ");
                scanf("%d",&c);
    
                printf("\nCounting from %d to %d\n",b,c);
    
                while(b<=c)
                {
                    printf("%d ",b);
                    b++;
                }
                printf("\n");
        break;
        case 4:
                printf("Enter Starting Series of Numbers: ");
                scanf("%d",&a);
                printf("Enter Ending Series of Numbers: ");
                scanf("%d",&d);
                diff=(d-a);
                array[diff]=d;
    
                printf("Select Array Value to Display: 0 to %d: ",diff);
                scanf("%d",&e);
    
                for(i=0;i<=diff;i++)
                {
                    array[i]=a;
                    if(i==e)
                    {
                        printf("%d\n",array[i]);
                    }
                    a++;
        
                }
        break;
        case 5:
                printf("Abouts\n");
        break;
        case 6:
                printf("Thank you!");
        break;
        }
        
    }while(input != 6);
    
  return 0;
}

`

bxgwgixi

bxgwgixi1#

这应该是一个评论,但我还没有足够的声誉。
正如Gerhardh所说,问题在于您在初始化之前使用了diff(这会导致未定义的行为)
正如你所说的,如果你把array的初始化移到case 4:里面,在diff被设置之后,程序应该按照预期工作。如果你想在切换之前保留它,试着在case 4:里面使用int*和malloc/free(并加上#include <stdlib.h>)。无论如何,你应该在使用它设置array的大小之前检查diff是否为正值
关于优化代码,可以跳过array[diff]=d;行,因为在for循环中设置了相同的值。

相关问题