【问题标题】:I do not know if I'm doing the code right. I have read that while (! feof (arch)) is always wrong我不知道我的代码是否正确。我读过 while (!feof (arch)) 总是错误的
【发布时间】:2017-09-13 05:02:59
【问题描述】:

这个想法是为学生的成绩创建一个数据库,但我不知道这段代码有什么问题

char bas;
char cadena[100];
FILE *arch, *pagC;
int c;
arch=fopen("alumnos.txt","r");
pagC=fopen("calificaciones.html","w");
/*html tags for a table*/
while(!feof(arch))         
{
    fprintf(pagC,"<TR>");
    while(c!='\n')                                  
    {
        fscanf(arch,"%[^:]%c",cadena,&bas);    
        fprintf(pagC,"<TD>%s</TD>",cadena);
    }
    fprintf(pagC,"</TR> \n");
}
fprintf(pagC,"</TABLE> </CENTER> </BODY> </HTML>");
fclose(pagC);
fclose(arch);

【问题讨论】:

  • “我不知道这部分代码有什么问题” - 我们不是读心术的人。当您从未告诉过预期的行为是正确时,我们怎么可能知道这段代码的错误?我们可以猜测,但这不是这个网站的目的。 Your post needs updating 包括预期行为、实际(错误)行为、它们的不同之处以及重现问题所需的任何其他信息(如输入数据等)。 minimal, complete example 展示错误行为是理想的。

标签: c


【解决方案1】:

这意味着:

while(getchar()!='\n')

您正在逐个字符地读取文件,但您对换行符不感兴趣 \n


请注意@WhozCraig 的这条重要评论

同样重要的是,换行符会终止循环,但无论如何 读过的,就丢失了。循环继续只意味着它 是,它不是换行符。此外, getchar() 可能从 stdin,而里面的语句似乎只对文件 IO 感兴趣。 不用说,这个循环很奇怪。

【讨论】:

  • 同样重要的是,换行符会终止循环,但无论读取什么,它都会丢失。循环继续只意味着它是什么,它不是换行符。此外,getchar()可能stdin 读取,而里面的语句似乎只对文件 IO 感兴趣。不用说,这个循环很奇怪。 getchar()可能错误,赞成在其中一个文件上使用fgetc(可能是arch
  • 请注意,在传统版本的 Unix 上,或者在 Linux 上,当输入来自文件而不是终端时,EOF 会导致 while (getchar() != '\n') 循环无限期地旋转它的轮子。循环也应该处理 EOF:int c; while ((c = getchar()) != EOF &amp;&amp; c != '\n') ... 和来自 fscanf() 调用的返回值也应该被检查。还有while (!feof(file)) is always wrong.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
相关资源
最近更新 更多