【C】文件操作练习

阅读: 评论:0

【C】文件操作练习

【C】文件操作练习

练习题目是某高校的考研专业课题目,题解都是自己写的,如果有错误,或者更优解,将会十分感谢能够指出

1.某文本文件存放了某公司30位员工的打卡次数,格式如下

工号    姓名   次数
S1001   张三    25
S1002   李四    20
......

编写程序,输出打卡次数最多的员工的工号、姓名和打卡次数。注意:打卡次数最多的员工可能不唯一,这时候要把他们都输出

#include "stdio.h"
#include "string.h"typedef struct
{char id[10];        //工号char name[10];      //姓名int count;          //打卡次数
}recordInfo_TypeDef;recordInfo_TypeDef buf[30];int main(int argc, char *argv[])
{char temp_count[3];        //暂存储打卡次数char temp[30] = {0};       //存储打卡次数最多的在数组中的序号int i = 0,k =0;FILE *fp = fopen("F:\", "r");if (fp == NULL){perror("Open Fail");}else{while (!feof(fp)){buf[i].count = 0;            //初始化打卡次数为0fscanf(fp, "%s%s%s", buf[i].id, buf[i].name, temp_count);      //从文件中读取,按照工号,姓名,打卡次数的格式for (int j = 0; temp_count[j] != ''; j++)     //文件中储存的是字符串形式,此for循环的作用为将打卡次数字符串形式转变为数字buf[i].count = buf[i].count * 10 + (temp_count[j] - '0');if (i > 0){if (buf[i].count < buf[temp[0]].count)continue;else if (buf[i].count == buf[temp[0]].count)temp[++k] = i;else if (buf[i].count > buf[temp[0]].count){memset(temp, 0, sizeof(temp));temp[0] = i;}}i++;}fclose(fp);for (i = 0; temp[i] != 0; i++){printf("%s  %s  %dn", buf[temp[i]].id,buf[temp[i]].name,buf[temp[i]].count);}}return 0;
}

2.有一个文本文件,其中有20个整数,每个整数占一行。编写程序将这些整数按照从小到大的顺序排好后,重新写入到该文件中。要求在排序前后分别输出该文件内容

#include "stdio.h"
#include "string.h"int main(int argc, char * argv[])
{int temp = 0;char nums[20] = { 0 };int numbers[20] = {0};          //将文件中的整数暂存在数组int len = 0;                    //用来表示有多少行memset(numbers, 0, sizeof(numbers));FILE *fp = fopen("F:\", "r");if (fp == NULL){perror("Open Error");}else{printf("排序前的整数顺序为:");while (!feof(fp)){fscanf(fp, "%s", nums);if (nums[0] == '-')		            //表示负数{for (int j = 1; nums[j] != ''; j++)numbers[len] = numbers[len] * 10 + (nums[j]-48);numbers[len] = -1 * numbers[len];}else{for (int j = 0; nums[j] != ''; j++)numbers[len] = numbers[len] * 10 + (nums[j]-48);}printf("%d, n",numbers[len]);len++;}fclose(fp);}/*冒泡排序*/for (int j = 0; j < len - 1; j++){for (int k = 0; k < (len - 1); k++){if (numbers[k] > numbers[k + 1]){temp = numbers[k];numbers[k] = numbers[k + 1];numbers[k + 1] = temp;}}}fp = fopen("F:\", "w");printf("n排序后的整数顺序为:");for (int j = 0; j < len; j++){printf("%d, ", numbers[j]);fprintf(fp, "%dn", numbers[j]);}fclose(fp);return 0;
}

3.某商店用二进制文件来存储商品信息,包括商品编号(长度为10的字符串)、商品名称(长度为20的字符串)、单价和数量。编写程序完成以下功能

1.输入商品信息,将它们存到二进制文件中取,每次输完一个商品信息后,按N结束输入,其他字符继续输入

2.输入一个商品编号查找这个商品信息

#include "string.h"
#include "stdlib.h"
#include "stdio.h"typedef struct
{char id[10];char name[20];char price[10];char amount[10];
}GoodsInfo_TypeDef;void InputGoods_Info(FILE *file)
{float temp_price = 0;int temp_amount = 0;int i = 1;char temp = 0;file = fopen("F:\GoodsInfo.bin", "ab");while (1){GoodsInfo_TypeDef goods;printf("请输入第%d商品编号: ",i);scanf("%s", goods.id);goods.id[10] = '';fflush(stdin);printf("请输入第%d商品名称: ",i);scanf("%s", goods.name);goods.name[20] = '';fflush(stdin);printf("请输入第%d商品价格: ",i);scanf("%f", &temp_price);fflush(stdin);printf("请输入第%d商品数量: ",i);scanf("%d", &temp_amount);fflush(stdin);fprintf(file, "%s %s %.2f %dn", goods.id, goods.name, temp_price, temp_amount);printf("第%d个商品信息输入完毕,按N键结束输入,按任意键继续录入商品信息: ",i);scanf("%c", &temp);if (temp == 'N' || temp == 'n'){printf("输入完毕已退出n");break;}else i++;}fclose(file);return;
}void FindGoods_Info(char *buf,FILE *file)
{file = fopen("F:\GoodsInfo.bin", "r");int a = 0;while (!feof(file)){GoodsInfo_TypeDef goods;fscanf(file, "%s%s%s%s", goods.id, goods.name, goods.price, goods.amount);if (!strncmp(buf, goods.id, strlen(goods.id) + 1)){printf("查找的商品编号为%sn", goods.id);printf("查找的商品名称为%sn", goods.name);printf("查找的商品价格为%sn", goods.price);printf("查找的商品数量为%sn", goods.amount);}}fclose(file);
}int main(int argc, char * argv[])
{FILE *fp = NULL;InputGoods_Info(fp);FindGoods_Info("S523", fp);return 0;
}

本文发布于:2024-02-01 09:59:23,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675276535841.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   文件
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23