#include<stdio.h> #include<string.h> int main() { FILE *fp; fp=fopen("in.txt","r"); if(fp==NULL) { perror("failed"); return 1; } char str[81]; int i=0; while(fgets(str,81,fp)!=NULL) { i++; fgets(str,81,fp); } printf("%d",i); fclose(fp); return 0; }为什么这样写不对
时间: 2024-03-19 08:45:05 浏览: 55
c语言专业课程设计电子英汉词典含源码.doc
这个程序的问题在于 `fgets()` 函数调用了两次,在循环中,每次读取文件都应该调用 `fgets()` 函数一次,否则会出现漏读或重复读的情况。因此,正确的做法是将第二个 `fgets()` 函数调用去掉即可。
以下是修改后的程序:
```c
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
fp = fopen("in.txt", "r");
if (fp == NULL) {
perror("failed");
return 1;
}
char str[81]; // 多开一个字符用于存储 '\0'
int count = 0;
while (fgets(str, 81, fp) != NULL) {
count++;
}
printf("%d\n", count);
fclose(fp);
return 0;
}
```
这个程序只调用了一次 `fgets()` 函数,每次循环都只读取一行,并将行数计数器加一。
阅读全文