如何使用fgets循环读文件每行,并且做判断
时间: 2024-05-06 22:17:30 浏览: 15
使用fgets可以循环读取文件中的每一行,可以结合使用while循环实现。例如:
```C
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE_LENGTH 100
int main() {
FILE *fp;
char line[MAX_LINE_LENGTH];
int line_num = 0;
fp = fopen("file.txt", "r");
if (fp == NULL) {
printf("File open error.\n");
exit(-1);
}
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
line_num++;
printf("Line %d: %s", line_num, line);
// 在这里可以对读取到的每一行进行判断和处理
}
fclose(fp);
return 0;
}
```
在上面的代码中,我们定义了一个最大行长为100的字符串数组`line`,并在循环中使用`fgets`读取文件中的每一行,如果读取成功,则打印出该行的内容,同时可以在循环中对每一行内容进行判断和处理。需要注意的是,fgets会读取每一行的换行符,因此在打印时需要使用`%s`格式化符号,并不能直接使用`puts`函数。
相关问题
使用fgets读文件时多读出一行
使用fgets读文件时多读出一行的原因是因为fgets函数会读取行末的换行符,而在下一次读取时,会先读取到这个换行符,导致多读出一行。解决方法是在读取每一行后,判断是否到达文件末尾,如果没有到达,则继续读取下一行,否则退出循环。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp;
char FlNm[] = "test.txt";
char RdStrng[1000];
fp = fopen(FlNm, "r");
if (fp == NULL) {
printf("文件读取失败");
return 1;
} else {
while (fgets(RdStrng, 1000, fp) != NULL) {
printf("%s", RdStrng);
}
fclose(fp);
}
return 0;
}
```
编写一个C语言程序:创建一个文本文件strs.txt,strs.txt的第一行为该文件包含字符串的个数n,从第二行开始,给出n个字符串,使用循环和调用函数,分别判断每个字符串是否为回文串,并且将判断结果写入另一个文件is_palindrome.txt,判断结果为yes或no。 提示: 使用fgets和fputs完成输入和输出 使用<stdlib.h>中的函数atoi将字符串转化成整型 fgets会读入每行最后的换行符,所以在使用fgets读入一个字符串后,将真实字符串的最后一位(此时应该是’\n’)置为’\0’,即str[strlen(str) - 1] = '\0’; 记得fclose
下面是实现上述功能的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
int is_palindrome(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 2]) {
return 0;
}
}
return 1;
}
int main() {
FILE *fp_in = fopen("strs.txt", "r");
FILE *fp_out = fopen("is_palindrome.txt", "w");
if (fp_in == NULL || fp_out == NULL) {
printf("File open error!\n");
return 0;
}
char line[MAX_LEN];
fgets(line, MAX_LEN, fp_in);
int n = atoi(line);
for (int i = 0; i < n; i++) {
fgets(line, MAX_LEN, fp_in);
line[strlen(line) - 1] = '\0'; // 去掉换行符
if (is_palindrome(line)) {
fputs("yes\n", fp_out);
} else {
fputs("no\n", fp_out);
}
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
```
程序的主要思路是,先打开输入和输出文件,从输入文件中读入字符串的个数,然后循环读入n个字符串,对每个字符串调用is_palindrome函数判断是否为回文串,并将判断结果写入输出文件。需要注意的是,在读入每个字符串后,需要将最后的换行符去掉。最后,记得关闭文件指针。