目录
四则运算
这段代码实现了一个简单的四则运算文件操作案例。
功能描述
-
生成四则运算表达式文件 (
c_data()
函数):- 该函数用于生成包含随机四则运算表达式的文本文件
四则运算.txt
。 - 每个表达式由两个随机整数和一个随机运算符(+、-、*、/)组成。
- 具体步骤:
- 使用
srand(time(NULL));
初始化随机数种子,以确保每次生成的随机数不同。 - 使用
fprintf(fp,"%d%c%d=\n",a,str[c],b);
将每个表达式写入文件,其中a
和b
是随机生成的操作数,str[c]
是随机选择的运算符。
- 使用
- 该函数用于生成包含随机四则运算表达式的文本文件
-
读取并处理四则运算表达式 (
read_data()
函数):- 该函数读取
四则运算.txt
中的表达式,计算其结果,并将结果更新到文件中。 - 具体步骤:
- 使用
fgets(buf,sizeof(buf),fp);
逐行读取文件中的表达式到缓冲区buf
。 - 使用
sscanf(buf,"%d%c%d=\n",&a,&c,&b);
解析每行表达式,获取操作数和运算符。 - 根据运算符进行相应的数学运算,并将结果保存到
count
变量中。 - 使用
sprintf(cmd[i++],"%d%c%d=%d\n",a,c,b,count);
将计算结果格式化为字符串,并存储在cmd
数组中。
- 使用
- 该函数读取
-
更新文件内容:
- 在读取完所有表达式并计算完成后,重新打开
四则运算.txt
文件,并将计算后的结果写回文件中。
- 在读取完所有表达式并计算完成后,重新打开
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define calc_num 10
FILE *open_file(char *filename, char *mode)
{
FILE *fp = fopen(filename, mode);
if (!fp)
{
perror("打开失败");
exit(1);
}
return fp;
}
void c_data()
{
FILE *fp = open_file("./四则运算.txt", "w");
srand(time(NULL));
int a = 0;
int b = 0;
int c = 0;
char str[4] = {'+','-','*','/'};
for(int i = 0; i < calc_num; i ++)
{
a = rand()%100 + 1;
b = rand()%100 + 1;
c = rand()%4;
fprintf(fp,"%d%c%d=\n",a,str[c],b);
}
fclose(fp);
}
void read_data()
{
FILE *fp = open_file("./四则运算.txt", "r");
int a = 0;
int b = 0;
char c = 0;
int count = 0;
int i = 0;
char buf[1024] = "";
char cmd[calc_num][128] = {0};
char *p = NULL;
while (1)
{
p = fgets(buf,sizeof(buf),fp);
if(p == NULL)
break;
sscanf(buf,"%d%c%d=\n",&a,&c,&b);
switch (c)
{
case '+':
count = a + b;
break;
case '-':
count = a - b;
break;
case '*':
count = a * b;
break;
case '/':
count = a / b;
break;
default:
break;
}
sprintf(cmd[i++],"%d%c%d=%d\n",a,c,b,count);
}
fclose(fp); // 关闭文件
FILE *fp1 = open_file("./四则运算.txt", "w");
for(int i = 0; i < calc_num; i ++)
{
fprintf(fp1,"%s",cmd[i]);
}
fclose(fp1); // 关闭文件
}
int main()
{
c_data();
read_data();
return 0;
}
英汉翻译
这是一个简单的英汉词典程序,通过命令行输入英文单词来查找对应的中文翻译。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define dict_num 43083 // 定义词典中词条的数量
// 定义词典条目结构体
typedef struct dict
{
char *key; // 英文单词
char *content; // 中文翻译
} DICT;
// 打开文件的函数,返回文件指针
FILE *open_file(char *filename, char *mode)
{
FILE *fp = fopen(filename, mode); // 使用指定模式打开文件
if (!fp)
{
perror("打开失败"); // 如果打开失败,打印错误信息
return NULL;
}
return fp; // 返回文件指针
}
// 过滤字符串末尾的空白字符
void filter_buf(char *buf)
{
int n = strlen(buf) - 1; // 获取字符串长度
while (n >= 0 && (buf[n] == ' ' || buf[n] == '\n' || buf[n] == '\r' || buf[n] == '\t'))
n--; // 去除末尾的空白字符
buf[n + 1] = '\0'; // 添加字符串结束符
}
// 初始化词典,从文件中读取数据到内存中的结构体数组中
void dict_init(DICT **temp)
{
DICT *p = malloc(sizeof(DICT) * dict_num); // 分配存储词典的内存空间
if (p == NULL)
{
perror("内存分配失败"); // 如果内存分配失败,打印错误信息
exit(EXIT_FAILURE); // 退出程序
}
FILE *fp = open_file("dictionary.txt", "r"); // 打开词典文件
if (!fp)
{
fprintf(stderr, "无法打开字典文件\n"); // 如果打开失败,打印错误信息
exit(EXIT_FAILURE); // 退出程序
}
char buf[1024]; // 用于存储读取的每行数据的缓冲区
int i = 0;
while (fgets(buf, sizeof(buf), fp))
{
filter_buf(buf); // 过滤掉读取行末尾的空白字符
p[i].key = malloc(strlen(buf) + 1); // 分配存储英文单词的内存空间
if (p[i].key == NULL)
{
perror("内存分配失败"); // 如果内存分配失败,打印错误信息
exit(EXIT_FAILURE); // 退出程序
}
strcpy(p[i].key, buf + 1); // 将读取的英文单词复制到结构体数组中,跳过开头的空格
fgets(buf, sizeof(buf), fp); // 继续读取下一行,即中文翻译的内容
filter_buf(buf); // 过滤掉末尾的空白字符
p[i].content = malloc(strlen(buf) + 1); // 分配存储中文翻译的内存空间
if (p[i].content == NULL)
{
perror("内存分配失败"); // 如果内存分配失败,打印错误信息
exit(EXIT_FAILURE); // 退出程序
}
strcpy(p[i].content, buf + 6); // 将读取的中文翻译复制到结构体数组中,跳过开头的空格和冒号
i++; // 继续处理下一条词典条目
}
fclose(fp); // 关闭文件
*temp = p; // 将词典数组指针传递给调用者
}
// 查找词典中是否存在指定的英文单词,如果找到则将对应的中文翻译拷贝到content中
int search_dict(char *cmd, DICT *dict, int n, char *content)
{
for (int i = 0; i < n; i++)
{
if (strcmp(cmd, dict[i].key) == 0) // 比较输入的英文单词和词典中的每个条目的单词
{
strcpy(content, dict[i].content); // 如果匹配成功,复制对应的中文翻译到content中
return 1; // 返回找到结果
}
}
return 0; // 如果未找到,则返回0
}
// 主函数,程序入口
int main()
{
DICT *dict = NULL; // 定义词典结构体指针
dict_init(&dict); // 初始化词典,从文件中读取数据
char cmd[128]; // 用户输入的英文单词存储数组
char content[128]; // 查找到的中文翻译存储数组
int ret; // 搜索结果标志
while (1)
{
printf("请输入需要翻译的单词:\n"); // 提示用户输入英文单词
fgets(cmd, sizeof(cmd), stdin); // 从标准输入读取用户输入
cmd[strcspn(cmd, "\n")] = '\0'; // 去除输入字符串末尾的换行符
ret = search_dict(cmd, dict, dict_num, content); // 在词典中搜索输入的英文单词
if (ret)
{
printf("翻译为:%s\n", content); // 如果找到,输出对应的中文翻译
}
else
{
printf("未找到翻译结果。\n"); // 如果未找到,提示未找到结果
}
}
// 释放词典中每个条目占用的内存空间
for (int i = 0; i < dict_num; i++)
{
free(dict[i].key);
free(dict[i].content);
}
free(dict); // 释放词典结构体数组占用的内存空间
return 0; // 程序正常退出
}