帮忙看看在c语言中 if else函数的问题?

让输入由大到小的五个数,为什么如下写输入5 4 3 2 1会让重新输入呢,但是去掉else flag=0这一语句输入5 4 3 2 1 就正确了,想了半天不懂错在哪,希望大神指点一下愚蠢的我?!int main(){ int a[5],i,flag=0; while(flag==0) { printf("enter data:\n"); for(i=0;i<5;i++) scanf("%d",&a[i]); for(i=0;i<5;i++) {if(a[i]>a[i+1]) flag=1; else flag=0;} } return 0;}

慕沐林林
浏览 369回答 2
2回答

慕少森

#include<stdio.h>void order(){int i,j,a[5],b[5],temp,count=0;printf("enter data:\n");for(i=0;i<5;i++){scanf("%d",&a[i]); //给数组a赋值b[i]=a[i]; //保存数组以便排序后比对}//使用冒泡排序,获得排序后的数组bfor(i=0;i<5;i++){for(j=0;j<4-i;j++){if(b[j]<b[j+1]){temp=b[j];b[j]=b[j+1];b[j+1]=temp;}}}//比对数组for(i=0;i<5;i++){if(a[i]==b[i]){count++;}}if(count!=5){order();//递归调用函数。当原数组和排序后数组元素顺序不一样时候调用}}int main(){order();return 0;}你这个程序问题很多,我帮你修改了一下,我用递归做的‍

米琪卡哇伊

#include<stdio.h>int main(){int a[5],i,flag=0;while(flag==0){printf("enter data:\n"); for(i=0;i<5;i++)scanf("%d",&a[i]);//应是i<4。如果i<5,当i等于4时,i+1会越界访问,可能出现a[4]<a[5]的情况,从而使flag=0;for(i=0;i<4;i++){if(a[i]>a[i+1])flag=1;elseflag=0;}}return 0;}另外说明一下,代码有逻辑错误,当输入的5个数满足a[3]>a[4]时,就会退出while,而此时a[0]到a[3]不一定是由大到小的。如输入:2 3 4 5 1。应改成:#include<stdio.h>int main(){int a[5],i,flag=0;while(flag==0){flag=1;printf("enter data:\n"); for(i=0;i<5;i++)scanf("%d",&a[i]);for(i=0;i<4;i++){if(a[i]<a[i+1])flag=0;break;}}return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP