为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕沐林林 2021-07-08 11:07:20
让输入由大到小的五个数,为什么如下写输入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;}
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

#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]; //保存数组以便排序后比对
}
//使用冒泡排序,获得排序后的数组b
for(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;
}
你这个程序问题很多,我帮你修改了一下,我用递归做的



查看完整回答
反对 回复 2021-07-11
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

#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;
else
flag=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;
}



查看完整回答
反对 回复 2021-07-11
  • 2 回答
  • 0 关注
  • 368 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信