请检查下代码为何部分未运行

######这段代码两个for循环中间 的那一部分代码莫名其妙的除了定义shu变量全没执行,求助原因

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include
int main()
{  int arr[3];
  scanf("%d",&arr[0]);
  scanf("%d",&arr[1]);
   scanf("%d",&arr[2]);
   int i,j,temp ;
   for(i=0;i<3-1;i++)
   {
       for(j=0;j<3-1-i;j++)//<=
       {
           if(arr[j]>arr[j+1])
           {
               temp=arr[j+1];
               arr[j+1]=arr[j];
               arr[j]=temp;
           }
       }
   }
     
      char shu;
     scanf("%c",&shu);//从这里开始
      

  
        if(shu=='A') printf("%d",arr[0]);
       else if(shu=='B') printf("%d",arr[1]);
       else if(shu=='C') printf("%d",arr[2]);//到这里,没执行,导致我跟答案永远多一个该死的空格
    
   for(i=1;i<=3;i++)//i<=2
   {
      scanf("%c",&shu);
      /* if(shu='A') printf(" %d",arr[0]);
       else if(shu='B') printf(" %d",arr[1]);
       else if(shu='C') printf(" %d",arr[2]);*/
       if(shu=='A') printf("%d",arr[0]);
       else if(shu=='B') printf("%d",arr[1]);
       else if(shu=='C') printf("%d",arr[2]); 
       
      
   }
  
    
    return 0;
}
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

我测试了一下,你出问题的原因是:注释区域读进来的字符是换行符\n。
解决方法:
在第一次scanf("%c",&shu);前加入getchar()读取掉这个多余的\n。
我为你修改了一下代码,已经可以输出四次了,具体细节你再微调:

#include<stdio.h>

int main() {
    int arr[3];
    scanf("%d", &arr[0]);
    scanf("%d", &arr[1]);
    scanf("%d", &arr[2]);
    int i, j, temp;
    for (i = 0; i < 3 - 1; i++) {
        for (j = 0; j < 3 - 1 - i; j++){
            if (arr[j] > arr[j + 1]) {
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    char shu;
    getchar();
    scanf("%c", &shu);
    if (shu == 'A') {
        printf("%d\n", arr[0]);
    } else if (shu == 'B') {
        printf("%d\n", arr[1]);
    } else if (shu == 'C') {
        printf("%d\n", arr[2]);
    }
    for (i = 1; i <= 3; i++){
        scanf("%c", &shu);
        if (shu == 'A') {
            printf("%d\n", arr[0]);
        } else if (shu == 'B') {
            printf("%d\n", arr[1]);
        } else if (shu == 'C') {
            printf("%d\n", arr[2]);
        }
    }
    return 0;
}

如果我的回答对你有帮助,还望采纳!

从你给出的代码中看来,问题可能是由于scanf读取数字之后会留下一个换行符,导致第一个scanf("%c",&shu);读取了这个换行符,而不是你预期的字符。

为了解决这个问题,有几种解决方法:

  1. 在输入shu之前,加一个getchar();语句,用来读取输入缓存中的多余换行符。

  2. 使用%[^\n]来读取,这样会忽略换行符。

  3. 使用fgets读取,fgets会读取整行的字符。
    例如:

scanf("%c",&shu);
变为
scanf("%c\n",&shu);

scanf("%[^\n]s", &shu);

fgets(shu,sizeof(shu),stdin);

希望能帮到你。

我不知道你用的什么ide,你这样,百度一下你当前ide debug应该要怎么操作,然后打一个断点逐个检查变量的变化过程

很可能都在正常运行,只不过scanf读字符时读到了回车,所以没等你输入,可以在if最后增加一个else确认一下

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632