从文件中读取成语,存储到数组中,并输出,如何用c语言实现
时间: 2024-03-05 08:52:28 浏览: 18
可以使用C语言中的文件操作函数和字符串处理函数来实现从文件中读取成语并存储到数组中的功能。具体实现步骤如下:
1. 打开文件
使用C语言中的fopen函数打开文件,语法如下:
```c
FILE* fopen(const char* filename, const char* mode);
```
其中,filename为文件名,mode为打开文件的模式,可以是"r"(只读模式)或"w"(写入模式)等。打开成功后,该函数返回一个文件指针,用于后续的文件操作。
2. 读取文件内容
使用C语言中的fgets函数从文件中读取一行内容,语法如下:
```c
char* fgets(char* str, int n, FILE* stream);
```
其中,str为存储读取内容的字符数组,n为最大读取字符数,stream为文件指针。该函数每次读取一行内容,读取成功后返回str,否则返回NULL。
3. 存储到数组中
在读取文件内容时,可以使用循环逐行读取,并将每行成语存储到一个字符串数组中。具体实现代码如下:
```c
#define MAX_LINE_LEN 100
#define MAX_IDIOM_NUM 1000
char idioms[MAX_IDIOM_NUM][MAX_LINE_LEN];
int read_idioms_from_file(const char* filename) {
FILE* fp = fopen(filename, "r");
if (!fp) {
return -1; // 打开文件失败
}
int i = 0;
char line[MAX_LINE_LEN];
while (fgets(line, MAX_LINE_LEN, fp) && i < MAX_IDIOM_NUM) {
// 去掉字符串末尾的换行符
line[strcspn(line, "\n")] = '\0';
strcpy(idioms[i], line);
i++;
}
fclose(fp);
return i; // 返回读取到的成语数量
}
```
上述代码中,MAX_LINE_LEN表示每行最大字符数,MAX_IDIOM_NUM表示最大成语数量,idioms为存储成语的二维字符数组。read_idioms_from_file函数用于从文件中读取成语,返回读取到的成语数量。该函数首先打开文件,然后使用循环逐行读取文件内容,去掉末尾的换行符后将成语存储到idioms数组中,并返回读取到的成语数量。最后关闭文件。
4. 输出数组内容
通过循环遍历数组,可以输出数组中存储的所有成语。具体实现代码如下:
```c
void print_idioms(const char** idioms, int num) {
for (int i = 0; i < num; i++) {
printf("%s\n", idioms[i]);
}
}
```
上述代码中,idioms为二维字符数组,num为存储在数组中的成语数量。print_idioms函数用于输出数组中存储的所有成语,通过循环遍历数组并使用printf函数输出每个成语即可。
完整代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LEN 100
#define MAX_IDIOM_NUM 1000
char idioms[MAX_IDIOM_NUM][MAX_LINE_LEN];
int read_idioms_from_file(const char* filename) {
FILE* fp = fopen(filename, "r");
if (!fp) {
return -1; // 打开文件失败
}
int i = 0;
char line[MAX_LINE_LEN];
while (fgets(line, MAX_LINE_LEN, fp) && i < MAX_IDIOM_NUM) {
// 去掉字符串末尾的换行符
line[strcspn(line, "\n")] = '\0';
strcpy(idioms[i], line);
i++;
}
fclose(fp);
return i; // 返回读取到的成语数量
}
void print_idioms(const char** idioms, int num) {
for (int i = 0; i < num; i++) {
printf("%s\n", idioms[i]);
}
}
int main() {
int num = read_idioms_from_file("idioms.txt");
if (num > 0) {
print_idioms((const char**)idioms, num);
}
return 0;
}
```
该代码将指定文件中的成语读取到数组中,并输出数组中的所有成语。