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;}

第1个回答  2019-08-30
#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;
}追问

懂的明明白白了,感谢大神!

本回答被提问者采纳
第2个回答  2019-08-30
#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;
}
你这个程序问题很多,我帮你修改了一下,我用递归做的
第3个回答  2019-08-30
for(i=0;i<5;i++) {if(a[i]>a[i+1]) 中
a[i+1]会在你的循环中造成数组下标越界,
下标越界时,当前量不可预知。
所以应该是for(i=0;i<4;i++){if(a[i]>a[i+1] ...

为什么我的代码里else if总是出错?
1、先说结论:说明你的else是独立的。2、出错原理:c语言里,有if不一定有else,但是有else一定要有相对应的if。3、解决方法:这种情况你往前推一下,所有的else能不能跟相应的if对应,很容易就找到了。4、良好习惯:虽然c语言不要求通过tab或者space来区分上下级关系,但是要养成良好书写习惯,比如说...

一道c语言题: if(){};\/\/ else{};
首先,要知道else配对的是哪个if,这个配对方法很简单,由于没加括号,直接往上行找离它最近的没配对的if就行。本题与else配对的是第二个if;其次,由于没有加括号,第一个if只能控制下一行的语句,即第二个if;第一个if无效,所以程序判定下一行的第二个if无效,而再往下一行的语句又受第二个if控...

c语言if-else循环问题
if(x)括号里面相当于布尔型变量,1为真,0为假。真,执行if;假,执行else。main()int x=1,y=0; if (!x) y++; \/\/!x=0,这里不做y++,直接跳下步elseelse if (x==) \/\/(x==??)这个不懂,当不存在吧。。if(x) y+=2; \/\/执行y+=2else y+=3;printf("%d",y...

为什么这段if-else语句的条件没有生效?无论输入什么输出都是1_百度知 ...
语法错误!您也够懒,大括号都懒得加,if,else语句后如果只有一句执行语句,可以不加 { },多于一句必须要加 { },个何况您循环嵌套了!还是不要偷懒,改写就写吧.

c语言的一个简单if...else语句的问题
1、在a中:如果if中的条件为真,则执行if中的代码块;条件为假,则判断第一个if else后的条件,为真执行其中代码,否则再判断第二个if else分支的条件...如果 if、if else\/\/第一个、if else\/\/第二个的条件都不满足,则执行最后的else中的代码 2、在b中:可以看出是多重嵌套 实际就相当于 ...

很简单的c语言问题,关于if-else语句的
else printf("%d\\n",i=i-j); \/\/为什么取到这里呢!因为你没打大括号 所以只会处理到if或else后面一句 === printf("%d\\n",i); \/\/这里的不能归到if (i==1)的范围 也是因为你没打大括号 也就是说if (i==1)的"if"到if (j==1)这里就没效了 后面就不归它管了 return 0;} 你...

在c语言程序中if-else语句的else语句总是不执行是怎么回事
1、新建一个工程和文件,命名为Third和first.c , 然后书写好程序的模板结构。2、首先我们演示一个很不规范的代码写法,很多初学者容易写成这样,导致出现意想不到的运行结果。3、很多初学者就会不知所措,其实只要把代码按照正确的缩进方式书写,就可以很一目了然了。4、这样书写过之后,就很清楚了...

c语言if else 语句中的问题
else (e>=14)-> 把(e>=14)去掉 另外, c在判断相等的时候是 e==11 双等号。这个编译的时候查不出来,但结果肯定就错了。

C语言if……else if多分支问题
条件语句中出错了,你写的是else if(0<x<=10),其实只用写 else if (x <= 10)而且(0<x<=10)表示 0<x的结果,即逻辑判断结果 如果 x > 0 则为真,结果为1,否则为0,再与10比较, 不管是1,还是0,<=10始终为真。所以,只要不执行第一个if语句的内容,就都执行y = 3*x*...

求大神关于c语言if与else的的问题。。。程序很简单,就是不知道为什么有...
我知道你的问题出在哪里。你说好像只循环了一次,而且if和else都执行了,其实那是不可能的。实际是这样的,循环执行了两次,第一次执行的是if语句,所以i自加了1,没有执行else 第二次没有执行if语句,直接执行的else语句,就会是这样的结果。至于你说没有达到执行else的条件,那只是你觉得,计算机...

相似回答