鱼C论坛

 找回密码
 立即注册
查看: 8753|回复: 22

为什么这里只能用if而不能用if else if else if呢?

[复制链接]
发表于 2013-9-7 11:32:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 With_You 于 2013-9-7 11:35 编辑


#include<stdio.h>
int main()
{  
int a,b,c,d,t;
printf("请输入4个整数:  ");
    scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b)  
{t=a;a=b;b=t;}
     else if (a>c)
  {t=a;a=c;c=t;}  
  else if(a>d)
{t=a;a=d;d=t;}
else if(b>c)
{t=b;b=c;c=t;}      
else if(b>d)  
{t=b;b=d;d=t;}
else(c>d)  
{t=c;c=d;d=t;}
printf("从小到大输出数为%d,%d,%d,%d\n",a,b,c,d);
                 

}
这是我一开始编写的程序,我一运行系统就提示C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\gbgbg\gbgbg.c(18) : error C2143: syntax error : missing ';' before '{'
执行 cl.exe 时出错.但我明明一个分号都没漏。 接着我看标准答案,答案上没有else,全部都写的是if。程序如下:


#include<stdio.h>
int main()
{  
int a,b,c,d,t;
printf("请输入4个整数:  ");
    scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b)  
{t=a;a=b;b=t;}
     if (a>c)
  {t=a;a=c;c=t;}  
  if(a>d)
{t=a;a=d;d=t;}
if(b>c)
{t=b;b=c;c=t;}      
if(b>d)  
{t=b;b=d;d=t;}
if(c>d)  
{t=c;c=d;d=t;}
printf("从小到大输出数为%d,%d,%d,%d\n",a,b,c,d);
                 
}

这样以后就对了,为什么这里只能用if而不能用else呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-7 12:30:50 | 显示全部楼层
楼主把else后面的(c>d)去掉程序就可以正常运行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 13:02:30 | 显示全部楼层
else 之后不能加表达式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 15:54:07 | 显示全部楼层
程序目的为从大到小排序,首先从a开始,将a与其他数一次比较,若a大,则进行下一次比较,若a小,两数交换,a为两数中较大数,经过一轮比较,a为最大数,然后将b与剩余数比较,也是这个原理,b为剩余数中最大数,依次比较,实现排序。

如果用if else if,else if是再if不成立的基础上进行判断的,也就是说第二个式子是啊a<b时判断执行,其他的都是再前几个式子不成立的基础上判断执行的,逻辑错误,无法实现排序

除了else格式,楼主最好在函数为加上return 0;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 17:03:35 | 显示全部楼层

嗯嗯,明白了,意思就是if格式就是并列的逻辑,但if else if 就是选择的逻辑,这里要用并列的,所以只能用if,对吧,谢谢了!
还有就是最后的那个return 0有什么用呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 17:04:59 | 显示全部楼层
楼上的都已经说完了 我就是来看看的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 17:49:00 | 显示全部楼层
With_You 发表于 2013-9-7 17:03
嗯嗯,明白了,意思就是if格式就是并列的逻辑,但if else if 就是选择的逻辑,这里要用并列的,所以只能用 ...

return 语句是程序控制权返回到调用它的方法,对于main来说就是返回调用它的操作系统。。return 0;设置返回值为0,开头int main中int指明main函数返回值为整形,c99标准建议把main函数设为int型,在函数最后设置一个return 0,当函数正常结束时,main返回值为0,运行出错时,将会返回一个非0的整数,程序员可以利用操作指令检查main的返回值,从而判断main函数是否正常执行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 18:06:56 | 显示全部楼层
本想答的,结果大家都已经说了。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 18:11:44 | 显示全部楼层
style?b? 发表于 2013-9-7 17:49
return 语句是程序控制权返回到调用它的方法,对于main来说就是返回调用它的操作系统。。return 0;设置返 ...

嗯,知道了,但我怎么才知道它返回的不是0呢?
我需要什么操作指令来检查呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-7 18:12:15 | 显示全部楼层
my_angel 发表于 2013-9-7 18:06
本想答的,结果大家都已经说了。。。。

嘿嘿,灰常灰常谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 18:14:55 | 显示全部楼层
With_You 发表于 2013-9-7 18:12
嘿嘿,灰常灰常谢谢你!

不用,我又没说什么。。。你还是多多打基础语法吧,犯这样的错事非常不应该的。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 18:37:34 From FishC Mobile | 显示全部楼层
因为,ese if后不能加表达式。
还有,int main()在结尾的大括号前要加上
return 0;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 18:40:42 From FishC Mobile | 显示全部楼层
With_You 发表于 2013-9-7 18:11
嗯,知道了,但我怎么才知道它返回的不是0呢?
我需要什么操作指令来检查呢?

多看甲鱼的视频,留意他叫你特别要注意的地方。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 19:19:28 | 显示全部楼层
With_You 发表于 2013-9-7 18:11
嗯,知道了,但我怎么才知道它返回的不是0呢?
我需要什么操作指令来检查呢?

我是在代码中return 0;之前加一句system("echo %ERRORLEVEL%");,在编译器中运行时就会在最后显示main的返回值。调试时用,用完删掉就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-7 22:58:31 | 显示全部楼层
加油加油。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-8 08:30:53 | 显示全部楼层
style?b? 发表于 2013-9-7 19:19
我是在代码中return 0;之前加一句system("echo %ERRORLEVEL%");,在编译器中运行时就会在最后显示main的 ...

嗯嗯,这下明白了,谢谢谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-8 09:01:00 | 显示全部楼层
style?b? 发表于 2013-9-7 19:19
我是在代码中return 0;之前加一句system("echo %ERRORLEVEL%");,在编译器中运行时就会在最后显示main的 ...

我囧了。我用这个方法木有显示main返回的值,而是这样 rfffd.jpg ,这是肿么了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 10:54:13 | 显示全部楼层
本帖最后由 style?b? 于 2013-9-8 13:43 编辑

system("echo %ERRORLEVEL%");
echo后面空格,你复制进去试试,我的可以。你少打了个%。:sweat:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-8 10:55:35 | 显示全部楼层
本帖最后由 style?b? 于 2013-9-8 11:09 编辑

sorry 忘了告诉你  #include<stdlib.h>,导入这个头文件,system命令才能用
QQ截图20130908110955.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-8 11:30:48 | 显示全部楼层
style?b? 发表于 2013-9-8 10:55
sorry 忘了告诉你  #include,导入这个头文件,system命令才能用

#include<stdio.h>
#include<math.h>  
#include<stdlib.h>
int main()
{
  int sign=1;
  double pi=0.0,n=1.0,term=1.0;
     while(fabs(term)>=1e-6)
  {
   pi=pi+term;
   n=n+2;
   sign=-sign;
   term=sign/n;
  }
  pi=pi*4;
  printf("pi=%10.8f\n",pi);
  system("echo %ERRORLEVEL");
  return 0;

} 12341231321.jpg 你看我添加了但还是出来的是这个,这到底是肿么了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 11:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表