C语 言IF的括号加与不加
本帖最后由 dad9 于 2012-7-30 15:30 编辑发了三次才发出来。我。。。。{:301_972:},为什么论坛的防火墙拦截语言两个字呢。。
要空格分开才行呢。{:301_973:}
我想说。贴代码没语法高亮,而且格式直接没了。(管理求语法高亮){:301_983:}
可能是我编辑的关系吧。
我发在自己的博客里,那边的版本好看一点,{:301_1003:}
原文链接:http://feiesoftware.blog.163.com/blog/static/203066057201263021935577/
==================================--------------------------华丽分割线------------------------================================
最近在学习C语言,再看一本名字叫做《C程序设计语言》,看到了第1.5.3单词计数,后面的一道题目是编写一个程序,一每一行一个单词的形式输出用户输入的字符。
Ok,作者给出的答案,判断是不是单词的方法就是,是否用空格、制表符、或回车进行 分割,如果有则说明之前的是一个单词,则输出一个换行符来换行。
下面我把代码贴上来:
#include <stdio.h>
#define IN 1
#define OUT 0
main(){
int c, state;
state = OUT;
while((c = getchar()) != EOF){
if (c == '\n' || c == ' '|| c == '\t'){
if (state == IN){
printf("\n");
state = OUT;
}
}else if (state == OUT){
state = IN;
putchar(c);
}else
putchar(c);
}
system("pause");
}测试界面如下:
就是完成分割字符这样一种功能,
仔细看下代码为什么不把这两句合成一句呢
}else if (state == OUT){
state = IN;
putchar(c);
}else
putchar(c);这两句其实可以合并成一句的。
因为IF语句的执行顺序是这样的、
if(条件1)
语句1
else if(条件2)
语句2
else
语句三
如果条件1成立就执行语句1,然后就跳出判断
如果条件一不成立,就判断条件2是否成立,如果成立九执行条件2
如果条件2 也不能成立就执行语句3
也就是说应该是语句1 或语句2如果执行了就会跳出判断,不会执行到语句3下面先来看一段IF语句测试代码#include <stdio.h>
main()
{
int a, b;
a = 1;
b = 2;
if (a == 1)
printf("1\n");
else
printf("2\n");
system("pause");
}
执行的结果如下:
OK ,假如改动一下 代码成这个样样子#include <stdio.h>
main()
{
int a, b;
a = 1;
b = 2;
if (a == 1)
if (b == 0)
printf("1\n");
else
printf("2\n");
system("pause");
}执行结果却是这个样子的:
按照刚才的逻辑,a等于1成立则执行if (b == 0)但是b=0不成立就跳出
但是他没有跳出,反而去执行了不属于他本身的else
当然,这里的不属于是写代码主观的思想,但是编译器就会认为下一个else就是数据嵌套判断里的if的,
而去执行它。
所以分割单词的程序代码最初我是改成这个样子的。
#include <stdio.h>
#define IN 1
#define OUT 0
main(){
int c, state;
state = OUT;
while((c = getchar()) != EOF){
if (c == '\n' || c == ' '|| c == '\t'){
if (state == IN){
printf("\n");
state = OUT;
}
}else
putchar(c);
state = IN;
}
system("pause");
}我把else if去掉了,因为我认为假如嵌套的IF判断不成功就直接跳出了,但事实却不是我想的那样的。
这里出错的主要原因是因为else语句没有加括号,所以else只执行一条语句,而加上括号则执行括号内语句。
但是这里我要说明的不是加括号与不加括号执行语句数不同,而是要说明if语句如果在嵌套使用的时候,括号省略很有可能内嵌套的IF语句在条件不成立的时候会执行,外IF语句的else。
于是我就修改经过我测试,修改代码把代码改成这样
#include <stdio.h>
#define IN 1
#define OUT 0
main(){
int c, state;
state = OUT;
while((c = getchar()) != EOF){
if (c == '\n' || c == ' '|| c == '\t'){
if (state == IN){
printf("\n");
state = OUT;
}
}else{
putchar(c);
state = IN;
}
}
system("pause");
}给else加上了个括号
把之前的那个测试程序代码也改一下。<font face="monospace">#include <stdio.h>
main()
{
int a, b;
a = 1;
b = 2;
if (a == 1){
if (b == 0){
printf("1\n");
}
}else{
printf("2\n");
}
system("pause");
}</font>
照代码最初的意图,他本就不应该输出什么东西
总结:C语言的IF的括号加与不加区别很大,IF语句下如果只有一句执行语句就不用加{}括号,多个语句时候就需要加,括号的作用不止用来括住多条语句,也是告诉编译器else 属于哪个IF。
发成功了吧,呵呵就是敏感词语的原因啊! 成功发布了吗.
代码写的要有质量
像if 这种逻辑判断的 最好不要 有神马奇葩的想法
任何语言都一样
if(swich){code 1} else{ code 2}
最后都是按照这种模式写 ,要不然不光是可读性差 , 有时候会因为这一个括号 纠结很长时间的
还有 c编译器 经过测试 不加括号不会增加执行效率 jnad 发表于 2012-7-30 15:32 static/image/common/back.gif
代码写的要有质量
像if 这种逻辑判断的 最好不要 有神马奇葩的想法
任何语言都一样
《C程序设计语言》作者这样写的。。我曾经去知道发帖子问为什么不加括号呢。
http://zhidao.baidu.com/question/455476665.html
总之。。这可能是他不好的地方吧。误导人。 dad9 发表于 2012-7-30 15:36 static/image/common/back.gif
《C程序设计语言》作者这样写的。。我曾经去知道发帖子问为什么不加括号呢。
http://zhidao.baidu.com/q ...
额, 我的意思是 像这种逻辑判断后的代码最好都加上{} 让他变成代码块 这样可读性 会提高有时候出错找不出来就是因为他
语法高亮。直接截图出来不就行了吗。 a13005746827 发表于 2012-7-30 15:41 static/image/common/back.gif
语法高亮。直接截图出来不就行了吗。
{:301_983:}多麻烦。。而且截图别人都没法复制呢 jnad 发表于 2012-7-30 15:39 static/image/common/back.gif
额, 我的意思是 像这种逻辑判断后的代码最好都加上{} 让他变成代码块 这样可读性 会提高有时候出错找不 ...
嗯,是呀。。我为了这个括号纠结了一个下午了{:1_921:}
C语言IF的括号加与不加
本帖最后由 a13005746827 于 2012-7-30 15:55 编辑C语言-----为了测试你所遇到的苦难。。。
没有屏蔽语言这两个字啊
C语言c语言
大小写都上了。
页:
[1]
2