我正在尝试编写一个程序,该程序读取文件并从第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条件并尝试打印,但这不起作用。任何输入都会有很大的帮助。
答案 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
。