鱼C论坛

 找回密码
 立即注册
查看: 2453|回复: 2

看鱼叔的C++快速入门,示例程序中while()和if()括号里的判断条件写法多样,求点拨!

[复制链接]
发表于 2017-2-15 16:54:23 | 显示全部楼层 |阅读模式

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

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

x
本人算是入门水平,看了小甲鱼的《快速入门学习C++》的前四讲,发现while和if里的判断条件种类很多,不知道如何掌握。下面举几个教程里的例子:
int main()
{
 ofstream out;
 out.open("test.txt");
 if(!out)
{
 cerr << "打开文件失败!"<<endl;
 return 0;
}
}
int main(int argc, char *argv[])
{
 FILE *in, *out;
 if((in = fopen(argv[1],"rb"))==NULL)
 {
   fprintf();
}
}

上面这段代码fopen返回的为什么是指针呢?
void main()
{
 int i;
 while(scanf("%d", &i) == 1)
{
}
}
上面这段为什么while里又是这样了?

感觉种类好多,自己写的话如果之前没见过就不知道怎么写了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-15 21:20:44 | 显示全部楼层
本帖最后由 pl_014 于 2017-2-15 21:22 编辑

选择结构只有if和switch两种语句块。
循环结构有三种:while、do...while还有for。
按这个思路理一理就好了。

fopen是c库标准函数,返回值类型是FILE *,返回的是文件指针。
scanf函数返回的是有几个函数被读取成功了,放到循环里就是不断地从stdin里读取整数,直到读取出错为止。


另外,条件判断语名里尽量不要包含赋值语句、自加自减操作符、可能改变外部状态的函数,以及过于复杂的表达式等。
 if((in = fopen(argv[1],"rb"))==NULL)
是一种不好的写法,在实践中应该拆成两行:
 FILE *in = fopen(argv[1],"rb"));
if (in == NULL)
 while(scanf("%d", &i) == 1)
应该拆成:
 int ret=scanf("%d", &i);
while(ret == 1)
{
...
ret=scanf("%d", &i);
}
代码的可读性比简洁性更为重要,调试一个程序往往要比编写一个程序困难很多,如果在编写的时候就穷尽了各种奇怪的技巧,那么维护的难度也就可想而知了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-2-15 20:16:26 | 显示全部楼层
见得多了就知道了,刚开始看有疑问很正常的。关于while判断的话,就看里面的返回值就可以了。关于fopen返回值,你可以去看函数解析,至于为什么是指针,反问一句:为什么不是指针?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 22:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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