C语言实现打开一个文本文件并读出每一行的内容
时间: 2024-02-24 14:56:23 浏览: 134
可以使用C语言中的文件操作函数来实现打开一个文本文件并读出每一行的内容,具体的实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
char *line = NULL;
size_t len = 0;
ssize_t read;
// 打开文件
fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(EXIT_FAILURE);
}
// 读取每一行的内容并输出
while ((read = getline(&line, &len, fp)) != -1) {
printf("读取到的行内容为:%s", line);
}
// 关闭文件并释放内存
fclose(fp);
if (line) {
free(line);
}
return 0;
}
```
在上面的代码中,我们使用了`fopen()`函数来打开一个名为`example.txt`的文本文件,并指定以只读方式(`r`)打开。然后,我们使用`getline()`函数来读取每一行的内容,并将读取到的内容输出到控制台上。最后,我们使用`fclose()`函数来关闭文件,并使用`free()`函数来释放动态分配的内存。
相关问题
用C语言实现1、从键盘上输入一行串字符,保存到指定文件夹中,文件名为f1.txt。2、打开第1题建立的文本文件f1.txt,在屏幕上显示其内容。已知一个数据文件f.txt中保存了5个学生的计算机等级考试成绩,包括学号、姓名和分数,文件内容如下,请将文件的内容读出并显示到屏幕中。然后将成绩最低的和成绩最高的学生信息输出到文件maxmin.txt中 301101 张文 91 301102 陈慧 85 301103 王卫东 76 301104 郑伟 69 301105 郭温涛 55
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 功能1:从键盘上输入一行字符串,保存到指定文件夹中,文件名为f1.txt
void saveStringToFile() {
FILE *fp;
char str[1000];
fp = fopen("f1.txt", "w"); // 打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("请输入一行字符串:");
fgets(str, 1000, stdin); // 从键盘读入一行字符串
fprintf(fp, "%s", str); // 将字符串写入文件
fclose(fp); // 关闭文件
printf("字符串已保存到文件f1.txt中。\n");
}
// 功能2:打开文件f1.txt,在屏幕上显示其内容
void displayFileContent() {
FILE *fp;
char ch;
fp = fopen("f1.txt", "r"); // 打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
printf("文件f1.txt的内容为:\n");
while ((ch = fgetc(fp)) != EOF) { // 逐个字符读取文件内容,并输出到屏幕上
putchar(ch);
}
fclose(fp); // 关闭文件
}
// 功能3:读取文件f.txt中的学生成绩,并输出最高分和最低分的学生信息到文件maxmin.txt中
void readScoreFromFile() {
FILE *fp, *fp2;
int i, score, max = -1, min = 101, maxIndex, minIndex;
char id[10], name[20];
fp = fopen("f.txt", "r"); // 打开文件
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
for (i = 0; i < 5; i++) { // 逐个读取学生信息,并输出到屏幕上
fscanf(fp, "%s %s %d", id, name, &score);
printf("%s\t%s\t%d\n", id, name, score);
if (score > max) { // 记录最高分和最高分学生的信息
max = score;
maxIndex = i;
}
if (score < min) { // 记录最低分和最低分学生的信息
min = score;
minIndex = i;
}
}
fclose(fp); // 关闭文件
fp2 = fopen("maxmin.txt", "w"); // 打开文件
if (fp2 == NULL) {
printf("无法打开文件\n");
exit(1);
}
fprintf(fp2, "最高分学生:%d\t", maxIndex+1);
fseek(fp, maxIndex*17, SEEK_SET); // 将文件指针定位到最高分学生的信息
fscanf(fp, "%s %s %d", id, name, &score);
fprintf(fp2, "%s\t%s\t%d\n", id, name, score);
fprintf(fp2, "最低分学生:%d\t", minIndex+1);
fseek(fp, minIndex*17, SEEK_SET); // 将文件指针定位到最低分学生的信息
fscanf(fp, "%s %s %d", id, name, &score);
fprintf(fp2, "%s\t%s\t%d\n", id, name, score);
fclose(fp2); // 关闭文件
printf("最高分和最低分的学生信息已保存到文件maxmin.txt中。\n");
}
int main() {
saveStringToFile();
displayFileContent();
readScoreFromFile();
return 0;
}
```
这段代码实现了三个功能:
1. 从键盘上输入一行字符串,保存到指定文件夹中,文件名为f1.txt;
2. 打开文件f1.txt,在屏幕上显示其内容;
3. 读取文件f.txt中的学生成绩,并输出最高分和最低分的学生信息到文件maxmin.txt中。
具体实现过程见代码注释。需要注意的是,在读取学生成绩时,我们使用了fscanf函数来逐个读取学生信息,其中第一个参数是文件指针,后面的参数是格式化字符串,按照文件中的格式逐个读取学生的学号、姓名和成绩。在输出最高分和最低分的学生信息到文件maxmin.txt中时,我们使用了fseek函数来将文件指针定位到最高分和最低分的学生信息的位置,然后再用fprintf函数将学生信息写入文件中。
题目描述:将2-4000中的所有素数分别输出到两个文件中,一个是文本文件,另一个是二进制文件;读出文件中的内容输出(每行10列)。 用C语言完成设计、编辑、编译和调式工作。
好的,我会尽力回答您的问题。这是一个关于C语言的编程问题,需要完成以下任务:
1. 找出2-4000中的所有素数;
2. 将素数分别输出到文本文件和二进制文件;
3. 从文件中读取素数,并输出到屏幕上,每行10列。
下面是一个可能的解决方案:
首先,我们需要编写一个函数来检查一个数是否为素数。以下是一个简单的实现:
```c
int is_prime(int n) {
if (n < 2) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
```
接下来,我们可以使用这个函数来生成2-4000中所有的素数,并将它们分别输出到文本文件和二进制文件中。以下是代码示例:
```c
#include <stdio.h>
int is_prime(int n) {
// 略去 is_prime 函数的实现
}
int main() {
FILE *fp_text = fopen("prime_numbers.txt", "w");
FILE *fp_binary = fopen("prime_numbers.bin", "wb");
for (int i = 2; i <= 4000; i++) {
if (is_prime(i)) {
fprintf(fp_text, "%d\n", i);
fwrite(&i, sizeof(int), 1, fp_binary);
}
}
fclose(fp_text);
fclose(fp_binary);
return 0;
}
```
注意,我们使用了 `fopen` 函数来打开文件,并使用 `fprintf` 和 `fwrite` 函数将数据写入文本文件和二进制文件中。
最后,我们需要编写代码来读取文件中的数据,并每行输出10个素数。以下是代码示例:
```c
#include <stdio.h>
int main() {
FILE *fp_text = fopen("prime_numbers.txt", "r");
FILE *fp_binary = fopen("prime_numbers.bin", "rb");
int count = 0;
int n;
printf("Prime numbers from text file:\n");
while (fscanf(fp_text, "%d", &n) != EOF) {
printf("%6d", n);
count++;
if (count % 10 == 0) {
printf("\n");
}
}
printf("\n\n");
count = 0;
printf("Prime numbers from binary file:\n");
while (fread(&n, sizeof(int), 1, fp_binary) != 0) {
printf("%6d", n);
count++;
if (count % 10 == 0) {
printf("\n");
}
}
fclose(fp_text);
fclose(fp_binary);
return 0;
}
```
注意,我们使用 `fscanf` 和 `fread` 函数来读取文本文件和二进制文件中的数据,并使用计数器来确保每行输出10个素数。
希望这个解决方案能够帮到您!
阅读全文