C语言中,for的使用问题?

从一个程序中抄到一个很奇怪的程序哦,是一个数据备份函数里

void backup() /*数据备份的函数*/
{
#define STRSIZ 10
char out_name[STRSIZ];
FILE *fp3,*fp4;
char ch;
if((fp3=fopen("list","rb+"))==NULL)
{
printf("cann't open this file.\n");
getchar();
exit(0);
}
printf("Enter the name for backup:\n");
for(scanf("%s",out_name);
(fp4=fopen(out_name,"w"))==NULL;
scanf("%s",out_name))
{
printf("Cannot use %s for output name\n",out_name);
printf("Re-enter file name>");
exit(0);
}
for(ch=getc(fp3);ch!=EOF;ch=getc(fp3))
putc(ch,fp4);
fclose(fp3);
fclose(fp4);
printf("backup is OK\n");
}

其中
for(scanf("%s",out_name);
(fp4=fopen(out_name,"w"))==NULL;
scanf("%s",out_name))

for(ch=getc(fp3);ch!=EOF;ch=getc(fp3))

怎么这么奇怪?for的格式不是
for(初值;循环条件;增量)

但这里怎么看也不像是增量哦!初值和增量一样的?

for(初值;表达式1;表达式2){表达式3;}
执行顺序
(1)初值
(2)表达式1,若为真则执行第(3)步,否则到(6)
(3)表达式3
(4)表达式2
(5)跳转到(2)
(6)for之后语句
只要记清这个规则就行了,具体怎么用,不要拘泥于形式~
这两条语句都没有循环主体(表达式3),所以就成了通过(表达式2)改变值,然后不停试探(表达式1)是否为真的循环.
for(scanf("%s",out_name);(fp4=fopen(out_name,"w"))==NULL;scanf("%s",out_name))
这句的意思就是输入一个文件名,尝试打开此文件并向其中写入,如果打开失败则要求重新输入文件名,直到能够正常打开文件,然后跳出循环继续后面语句
for(ch=getc(fp3);ch!=EOF;ch=getc(fp3))
相似的,在ch初次读取字符后,就判断ch是否是文件尾,如果不是那就继续从fp3指向的文件读取字符.其实就是指针定位到文件尾.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-10
for(scanf("%s",out_name);
(fp4=fopen(out_name,"w"))==NULL;
scanf("%s",out_name))
for(ch=getc(fp3);ch!=EOF;ch=getc(fp3))
for循环中,直接这样都可以啊:for(;;)死循环,
这个象是for语句中的调用函数来做为条件,可能是为了达到某个循环或程序需要,设置一些char类型的变量.
第2个回答  2008-06-10
要看到其本质,其实怎样写都可以。
相似回答