0

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

主要的() {

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 >=30 和 nol <=50 条件并尝试打印,但这不起作用。任何输入都会有很大帮助。

4

2 回答 2

4

"and" 运算符是&&, not||

...

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

如果要打印行本身而不仅仅是数字,则需要收集字符或其他内容以在找到'\n'.

于 2013-02-02T22:47:08.450 回答
3

首先,逻辑部分。

通常我们认为行号从 1 而不是 0 开始。所以初始化nol为 1。

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

当然你需要使用&&而不是||,否则你的条件总是正确的。

如果你想实际显示这些线条,你需要这样的东西:

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

注意语句的顺序。

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

于 2013-02-02T22:48:27.083 回答