【问题描述】 现有一文本文件,需要你编写程序对该文件的行数进行计算(包括空行),并输出。文件每一行不超过80个字符。 【输入形式】 一文本文件,其文件名为in.txt。 【输出形式】 输出一个整数,为文件的行数 【样例输入】 若文件内容为: a a 【样例输出】 3下面这个程序哪里有问题#include<stdio.h> #include<string.h> int main() { FILE *fp; fp=fopen("int.txt","r"); if(fp==NULL) { perror("failed"); return 1; } char str[80]; int i; for(i=0;!feof(fp);i++) { fgets(str,80,fp); } printf("%d",i); fclose(fp); return 0; }
时间: 2024-03-19 14:44:47 浏览: 82
sloc:计算 M 文件的源代码行数-matlab开发
这个程序的问题在于最后的行数统计是多余的,因为在最后一次读取文件时,因为已经到达文件末尾,所以 `fgets()` 函数不会再读取新的内容,但是循环仍然会执行一次,导致行数会多计算一次。另外,文件名应该是 "in.txt" 而不是 "int.txt"。
以下是修改后的程序:
```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;
}
```
主要的修改有两点:
1. 将循环条件改为使用 `fgets()` 函数的返回值,如果返回值为 `NULL`,说明已经读到文件末尾,不需要再继续读取了。
2. 将数组 `str` 的大小改为 81,因为每行最多有 80 个字符,还需要占用一个字符存储字符串结束标志 '\0'。
阅读全文