程序仅从第30行到第50行打印

时间:2013-02-02 22:44:27

标签: c operators

我正在尝试编写一个程序,该程序读取文件并从第30行到第50行打印行但无法实现。

main(){

FILE *fp;
char ch;

int nol = 0;
fp = fopen ("test.txt","r");

while (1){
    ch = fgetc(fp);

    if (ch == '\n')
        nol++;


    if (nol > 30 || nol < 50){
        printf ("value of NOL is %d\n", nol);
    }


    if (ch == EOF)
        break;


}
fclose (fp);
printf ("\nNumber of line in file: %d\n", nol);

我尝试使用if nol&gt; = 30和nol&lt; = 50条件并尝试打印,但这不起作用。任何输入都会有很大的帮助。

2 个答案:

答案 0 :(得分:4)

“and”运算符为&&,而不是||

...

if (ch == '\n')
{    nol++;
     if (nol >= 30 && nol =< 50) 
         printf ("value of NOL is %d\n", nol);
}

如果您想打印线本身而不仅仅是数字,那么在找到'\n'时,您需要收集字符或其他内容进行打印。

答案 1 :(得分:3)

首先是逻辑部分。

通常我们认为行号从1开始而不是0.因此将nol初始化为1。

如果要显示第30行到第50行,则需要将它们包含在测试中。使用>=代替><也相同)。

当然,你需要使用&&代替||,否则你的情况总是如此。

如果你想真正显示这些行,你需要这样的东西:

if( nol >= 30 && nol <= 50 ) putc(ch);
if (ch == '\n') nol++;

请注意陈述的顺序。

但实际上,如果要显示行,而不是一次只读一个字符,则应该使用fgets