搜索
bottom↓
回复: 43

C语言求指导!当程序太多的“IF”怎么办!感觉没层次感!

[复制链接]

出0入0汤圆

发表于 2012-4-28 08:34:54 | 显示全部楼层 |阅读模式
本人初来咋到,现在还是一名大三学生!由于前2年荒废了学习!基础不好!好不容易发现这么一个好的平台!希望可以借此机会提高自己!
所以在这里还请各位前辈帮帮小弟一把!本人虚心好学!
C语言求指导!当程序太多的“IF”怎么办!感觉有时候分不清那个“ELSE”和他对应!需要多重循环的时候用什么语句最好!感觉没层次感!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-28 08:36:38 | 显示全部楼层
if能实现多重循环?

出0入0汤圆

发表于 2012-4-28 08:40:32 | 显示全部楼层
写的时候对对齐,层次感不就有了......
实在没办法,还可以加注释在一边......

出0入0汤圆

发表于 2012-4-28 08:57:05 | 显示全部楼层
Tab键.
在VC下可以先Ctrl+A,然后Alt+F9.不过有些对齐会出现问题.

出0入0汤圆

发表于 2012-4-28 09:08:50 | 显示全部楼层
流程图辅助

出0入0汤圆

发表于 2012-4-28 09:10:32 | 显示全部楼层
switch语句?

出0入0汤圆

发表于 2012-4-28 09:14:49 | 显示全部楼层
也有同样的疑问,一堆的if else

出0入0汤圆

发表于 2012-4-28 09:16:51 | 显示全部楼层
花括对齐。
if 是C使用率最高的,如果没有if真不知程序该怎么写

出10入8汤圆

发表于 2012-4-28 09:26:17 | 显示全部楼层
状态机、switch

出0入0汤圆

发表于 2012-4-28 09:30:19 | 显示全部楼层
推荐用source insight编写代码,然后用astyle插件来定义代码规范,可以自动把代码重新编辑一次

出0入0汤圆

发表于 2012-4-28 09:31:19 | 显示全部楼层
lengqing1309 发表于 2012-4-28 09:26
状态机、switch

switch可没有if那样可以进行优先判定哦!

出0入0汤圆

发表于 2012-4-28 09:33:26 | 显示全部楼层
korgo 发表于 2012-4-28 09:31
switch可没有if那样可以进行优先判定哦!

分支在前不就是优先判定了。

出0入0汤圆

发表于 2012-4-28 09:41:03 | 显示全部楼层
用UE不是可以折叠吗?一折叠就知道那个对应那个了。前提是都有括号。

出0入0汤圆

发表于 2012-4-28 09:49:28 | 显示全部楼层
if 不要超过 3层, 可以把一系列操作定义成函数,减少if 的层数,增强阅读性

出0入0汤圆

发表于 2012-4-28 09:56:12 | 显示全部楼层
格式要对齐,

出0入0汤圆

发表于 2012-4-28 09:56:42 | 显示全部楼层
if
else if
else if
else

出0入0汤圆

发表于 2012-4-28 10:12:07 | 显示全部楼层
见过...一堆if else...本人 if else 最多嵌套不超过3次,要么重写,要么。。。多写几个函数。。。

出0入0汤圆

发表于 2012-4-28 10:29:56 来自手机 | 显示全部楼层
状态机很好用,可以实现多重循环,多级菜单。

出0入0汤圆

发表于 2012-4-28 10:44:13 | 显示全部楼层
if和else或ifelse必须搭配使用;代码需要优化,先考虑switch-case,再if-else。最最后再考虑goto。推荐本书:《C语言程序设计:现代方法(第2版)》 - 金(K.N.King);

出0入0汤圆

发表于 2012-4-28 10:47:00 | 显示全部楼层
if选择语句,建议多看书先

出0入0汤圆

发表于 2012-4-28 11:38:15 | 显示全部楼层
太多IF就用switch语句咯
其实写代码养成良好的缩进习惯,可读性也很高

出0入0汤圆

发表于 2012-4-28 11:41:21 | 显示全部楼层
缩进
良好的缩进是很重要的~~~

出0入0汤圆

 楼主| 发表于 2012-4-29 22:11:30 | 显示全部楼层
utopiaprince 发表于 2012-4-28 09:30
推荐用source insight编写代码,然后用astyle插件来定义代码规范,可以自动把代码重新编辑一次 ...

可以发一下source insight的连接么!刚刚百度看了一下!不过没怎么了解!新手不知道!还请前辈指导!讲讲你的感受!和技巧!谢谢啦!

出0入0汤圆

 楼主| 发表于 2012-4-29 22:12:39 | 显示全部楼层
luluxiu 发表于 2012-4-28 10:44
if和else或ifelse必须搭配使用;代码需要优化,先考虑switch-case,再if-else。最最后再考虑goto。推荐本书 ...

有书的PDF么!来个链接!谢啦!

出0入0汤圆

 楼主| 发表于 2012-4-29 22:17:52 | 显示全部楼层
usingavr 发表于 2012-4-28 09:49
if 不要超过 3层, 可以把一系列操作定义成函数,减少if 的层数,增强阅读性 ...

这建议老师也说过!想请教一下函数定义在头文件里和定义在MAIN()上面有上面区别么!我也觉得是这样比较好!可是还是有些生疏感觉!可以有什么让我从主观上改变我的编程思路么!这个是我参考别人的不过MIAN(0主函数都是我自己写的!感觉好乱!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-4-29 22:19:04 | 显示全部楼层
封装成子函数。

出0入0汤圆

 楼主| 发表于 2012-4-29 22:20:46 | 显示全部楼层
automaticdai 发表于 2012-4-29 22:19
封装成子函数。

刚刚有前辈教过我了!不过还是谢谢啦!

出0入0汤圆

发表于 2012-4-29 23:22:04 | 显示全部楼层
子函数,宏定义,状态机。。。得慢慢来,写多了,想得多了,水平就慢慢上去了。

出0入0汤圆

发表于 2012-4-29 23:34:52 | 显示全部楼层
if(i==0)
{
       if(j==0)
       {
               if(k==0)
               {
                      ......
               }
               else
               {
                     ......
               }
       }
       else
       {
              ......
       }
}
else
{
       .....
}

只有是同一级的if else 才让他们在同一条垂直线上

出0入0汤圆

 楼主| 发表于 2012-4-30 08:35:13 | 显示全部楼层
yuxinxb13 发表于 2012-4-29 23:34
if(i==0)
{
       if(j==0)

真心懂了!

出0入0汤圆

发表于 2012-5-7 17:49:13 | 显示全部楼层
w514640 发表于 2012-4-29 22:12
有书的PDF么!来个链接!谢啦!

我这好书都是买的,电子版没感觉
基础好了再看《高质量C编程指南》

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-5-7 18:25:42 | 显示全部楼层
这个好象要练内功啊,代码的结构密切关系设计思路以及整个软件的结构,要写出unix那么优美的代码,数据结构和操作系统,要反复咀嚼。。。

出0入0汤圆

发表于 2012-5-7 18:28:01 | 显示全部楼层
是心乱了,程序不乱

出0入0汤圆

发表于 2012-5-7 19:30:11 | 显示全部楼层
短期记忆好,没问题的,要记住 if的else在哪里,如果不行,尽量层次化,再不行编辑器辅助,如果还不行,说明不是编程的料。

出0入0汤圆

 楼主| 发表于 2012-5-8 20:24:53 | 显示全部楼层
luluxiu 发表于 2012-5-7 17:49
我这好书都是买的,电子版没感觉
基础好了再看《高质量C编程指南》

谢谢啦!前辈懂OV系列的芯片么!本人最近要做一个基于FPGA的摄像头!有点无头绪!

出0入0汤圆

发表于 2012-5-9 00:06:34 | 显示全部楼层
建议在写代码的时候不要直接在编译软件里面写,可以先在更智能的编辑工具里面编写代码,例如UltraEdit等。

出30入25汤圆

发表于 2012-5-9 02:47:39 | 显示全部楼层
本帖最后由 shamiao 于 2012-5-9 03:00 编辑

看懂好办,缩进,然后在每个endif处标明对应的是哪个if。
if或者for套的层数太多了一定是程序结构有问题。
一般3层就该想想,4层除非不得已不能用。
5层以上必须推翻重来。铁律,死规则,没余地,不商量,想都不用想。

程序结构必须注意,光“可行”不够,必须好读好改。
高级语言的设计思想就是牺牲代码效率换取编程效率嘛。
从这个意义上讲,写高级语言的程序,只是能运行那连及格都算不上。
逻辑一定要显而易见。至少要达到本人一个月后再看能懂的程度。

至于函数在哪写,答案是确定的:
①跨文件公用的函数,声明一定在.h里,代码一定在.c里。定义和实现分开,习惯啊习惯。
②文件内私有函数,声明和定义全在.c里。
原则:.h用于互相交流函数的调用方法,而绝对不可以暴露函数的内部逻辑!

另外,要做啥??基于FPGA的摄像头?!
FPGA是硬件并行的关系,C是由CPU主持串行执行的关系。
运作方式不一样,代码干脆就是两种完全不同的思想,碰到的困难也完全不同。
这根本不是一般的编程语言之间,只有点语法区别的层面。
所以求您了,千万别FPGA和C一起学,生不如死有木有啊!

出0入0汤圆

发表于 2012-5-9 04:47:35 | 显示全部楼层
写对齐了,又有层次感又美观!

出0入0汤圆

 楼主| 发表于 2012-5-9 07:37:58 | 显示全部楼层
shamiao 发表于 2012-5-9 02:47
看懂好办,缩进,然后在每个endif处标明对应的是哪个if。
if或者for套的层数太多了一定是程序结构有问题。
...

可是没有办法啊!差一个层次也得学啊!现在不学到以后学恐怕会有些晚!在学校的时间远比出去工作的时候时间来的更宽裕!所以前辈恳请帮帮小弟啦!不过你说的这段话确实受益匪浅!还是在这里谢谢啦!

出0入0汤圆

发表于 2012-5-9 08:31:20 | 显示全部楼层
写的时候该对齐的对齐...在结构上增加层次感吧

出0入0汤圆

发表于 2012-5-9 09:11:58 | 显示全部楼层
w514640 发表于 2012-5-8 20:24
谢谢啦!前辈懂OV系列的芯片么!本人最近要做一个基于FPGA的摄像头!有点无头绪! ...

这个没玩过,等你玩会也是前辈了,有进展就一块在坛子里讨论吧

出0入0汤圆

发表于 2012-5-9 10:48:30 | 显示全部楼层
参考华为的软件编写规范

出0入0汤圆

发表于 2012-5-9 10:58:20 | 显示全部楼层
函数。、

一个函数如果超过10行,就要考虑是否需要写子函数。

出0入0汤圆

发表于 2012-5-9 11:01:27 | 显示全部楼层
新手路过~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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