######这段代码两个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;
}
我测试了一下,你出问题的原因是:注释区域读进来的字符是换行符\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);读取了这个换行符,而不是你预期的字符。
为了解决这个问题,有几种解决方法:
在输入shu之前,加一个getchar();语句,用来读取输入缓存中的多余换行符。
使用%[^\n]来读取,这样会忽略换行符。
使用fgets读取,fgets会读取整行的字符。
例如:
scanf("%c",&shu);
变为
scanf("%c\n",&shu);
scanf("%[^\n]s", &shu);
fgets(shu,sizeof(shu),stdin);
希望能帮到你。
我不知道你用的什么ide,你这样,百度一下你当前ide debug应该要怎么操作,然后打一个断点逐个检查变量的变化过程
很可能都在正常运行,只不过scanf读字符时读到了回车,所以没等你输入,可以在if最后增加一个else确认一下
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!