Lpp 发表于 2017-2-15 16:54:23

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

本人算是入门水平,看了小甲鱼的《快速入门学习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,"rb"))==NULL)
{
   fprintf();
}
}

上面这段代码fopen返回的为什么是指针呢?

void main()
{
int i;
while(scanf("%d", &i) == 1)
{
}
}
上面这段为什么while里又是这样了?

感觉种类好多,自己写的话如果之前没见过就不知道怎么写了。

pl_014 发表于 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,"rb"))==NULL)
是一种不好的写法,在实践中应该拆成两行:
FILE *in = fopen(argv,"rb"));
if (in == NULL)

while(scanf("%d", &i) == 1)
应该拆成:
int ret=scanf("%d", &i);
while(ret == 1)
{
...
ret=scanf("%d", &i);
}

代码的可读性比简洁性更为重要,调试一个程序往往要比编写一个程序困难很多,如果在编写的时候就穷尽了各种奇怪的技巧,那么维护的难度也就可想而知了。

潮汐海灵-菲兹 发表于 2017-2-15 20:16:26

见得多了就知道了,刚开始看有疑问很正常的。关于while判断的话,就看里面的返回值就可以了。关于fopen返回值,你可以去看函数解析,至于为什么是指针,反问一句:为什么不是指针?
页: [1]
查看完整版本: 看鱼叔的C++快速入门,示例程序中while()和if()括号里的判断条件写法多样,求点拨!