c语言 文件写入和读取

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
struct student{               /* 学生信息结构 */
    char no[9];              /* 学号         */
    char name[10];           /* 姓名         */
    char sex[3];             /* 性别         */
    int score[4];             /* 成绩和总分   */
};

int menu();                                /* 菜单*/
void readsi(struct student stud[],int *n);  /* 读取数据*/
void printsi(struct student *pstud,int n); /* 输出文件内容*/
void ssort(struct student *pstud, int n);  /*按总分的降序排序函数 */
void xsort(struct student *pstud, int n);/*按学号的升序排序函数 */
void tjave(struct student *pstud, int n);/*统计各门功课的平均分函数 */
void tjrs(struct student *pstud,int n);/*统计男女同学的人数函数 */
void namesort(struct student *pstud,int n);/*按姓名升序排序 */
void math_excellent(struct student *pstud,int n);/*数学考试成绩优秀(>=90)*/
void all_excellent(struct student *pstud,int n);/*每门考试成绩优秀(>=90)或者总分》=270*/

void main()                               /* 主函数 */
{
    struct student stud[N];
    int code,  n=0;
    readsi(stud,&n);
    printf("\n  按<Enter>, 进入菜单:  ");
    scanf("%*c");                            /* 暂停 */
    while(1)
    {
        code=menu();                          /* 调用主控菜单 */
        switch(code)
        {
            case 0:  exit(1);
            case 1:  printsi(stud,n);
                     printf("\n  按<Enter>, 进入菜单:  ");
                     scanf("%*c");
                     break;
            case 2:  ssort(stud,n);break;
            case 3:  xsort(stud,n);break;
            case 4:  tjave(stud,n);break;
            case 5:  tjrs(stud,n);break;
            case 6:  namesort(stud,n);break;
            case 7:  math_excellent(stud,n);break;
            case 8:  all_excellent(stud,n);break;

         }   scanf("%*c");
    }
}

int menu()             /* 主控菜单函数 */
{
    int code;
    printf("            菜   单\n");
    printf("    *****************************************************\n");
    printf("      0.  退出                  1.  显示学生信息 \n");
    printf("      2.  按总分排序            3.  按学号排序\n");
    printf("      4.  统计各门功课平均分    5.  统计男女同学人数\n");
    printf("      6.  按姓名排序            7.  数学考试成绩优秀人数\n");
    printf("      8.  考试成绩优秀人数    \n");
    printf("    *****************************************************\n");
    printf("     请按序号选择:\n");
    scanf("%d",&code);
    return code;
} 

void readsi(struct student stud[],int *n)    /* 读数据函数 */  //int *n;n需要返回
{
    FILE *fp;
    int i;
//    if((fp=fopen("studf.txt","r"))==NULL)
    if((fp=fopen("C:/Users/minmin/Desktop/studf.txt","r"))==NULL)//文件存放在指定路径,把路径写上就可以了
    {
        printf("Cannot open file!\n");
        exit(1);
    }
    for(i=0;!feof(fp);i++)
    {
        (*n)++;
        fscanf(fp,"%s %s %s %d %d %d %d",    stud[i].no,stud[i].name,stud[i].sex,
        &stud[i].score[0],  &stud[i].score[1],  &stud[i].score[2],  &stud[i].score[3]);

        stud[i].score[3]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
    }
    fclose(fp);
}

void printsi(struct student *pstud, int n)         /* 输出数据函数 */
{
    int i;
    printf(" 学号    姓名  性别   数学  英语  C  总分\n");
    printf("******************************************************\n");
    for(i=0;i<n;i++)
    {
        printf("%-8s %-8s %-2s  %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
        pstud[i].score[0],  pstud[i].score[1],  pstud[i].score[2],  pstud[i].score[3]);
    }
}

void ssort(struct student *pstud,int n)       /*按总分的降序排序函数 */
{
    struct student temp;
    int i,j,min;
    for(i=0;i<n;i++)
    {
        min=i;                             /* 找最小值元素的下标*/
        for(j=i+1;j<n;j++)
            if(pstud[j].score[3]>pstud[min].score[3]) min=j;
        if(min!=i)                          /* 交换 */
        {
            temp=pstud[i];  pstud[i]=pstud[min];   pstud[min]=temp;
        }
    }
}

void xsort(struct student *pstud,int n)     /*按学号的升序排序函数 */
{
    struct student temp;
    int  i, j;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(pstud[i].no,pstud[j].no)>0)
            {
                temp=pstud[i];
                pstud[i]=pstud[j];
                pstud[j]=temp;
            }
        }
    }
}

void tjave(struct student *pstud,  int n)     /*统计各门功课的平均分函数 */
{
    float avemath=0,aveeng=0,avec=0,avesum=0;
    int i;
    for(i=0;i<n;i++)
    {
        avemath+=pstud[i].score[0];
        aveeng+=pstud[i].score[1];
        avec+=pstud[i].score[2];
        avesum+=pstud[i].score[3];
    }
    avemath/=n; aveeng/=n; avec/=n; avesum/=n;
    printf("共有%d个同学,各门功课及总分的平均分为:\n",n);
    printf(" 数学   英语   C   总分\n");
    printf("%5.2f %5.2f %5.2f %5.2f\n",avemath,aveeng,avec,avesum);
}

void tjrs(struct student *pstud,int n)        /*统计男女同学的人数函数 */
{
    int i, nummen=0, numwomen=0;
    for(i=0;i<n;i++)
    {
        if(strcmp(pstud[i].sex,"男")==0) nummen++;
        else numwomen++;
    }
    printf("     共有%d个同学: \n",n);
    printf("     其中男同学有%d个,女同学有%d个\n",nummen,numwomen);
}

void namesort(struct student *pstud,int n)/*按姓名升序排序 */
{
    struct student temp;
    int  i, j;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(pstud[i].name,pstud[j].name)>0)
            {
                temp=pstud[i];
                pstud[i]=pstud[j];
                pstud[j]=temp;
            }
        }
    }
}

void math_excellent(struct student *pstud,int n)/*数学考试成绩优秀(>=90)*/
{
    int  i, num = 0;
    for(i=0;i<n;i++)
    {
        if(pstud[i].score[0]>=90)
        {
            num++;
            printf("%-8s %-8s %-2s  %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
            pstud[i].score[0],  pstud[i].score[1],  pstud[i].score[2],  pstud[i].score[3]);
        }
    }
    printf("数学优秀的人数为:%d\n",num);
}

void all_excellent(struct student *pstud,int n)/*每门考试成绩优秀(>=90)或者总分》=270*/
{
    int  i, num = 0;
    for(i=0;i<n;i++)
    {
        if(((pstud[i].score[0]>=90)&&(pstud[i].score[1]>=90)&&(pstud[i].score[2]>=90))||(pstud[i].score[3]>=270))
        {
            num++;
            printf("%-8s %-8s %-2s  %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
            pstud[i].score[0],  pstud[i].score[1],  pstud[i].score[2],  pstud[i].score[3]);
        }
    }
    printf("优秀的人数为:%d\n",num);
}
时间: 2024-09-28 18:22:57

c语言 文件写入和读取的相关文章

【PHP】文件写入和读取详解

文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换行 一.实现文件读取和写入的基本思路: 1.通过fopen方法打开文件:$fp =fopen(/*参数,参数*/),fp为Resource类型 2.进行文件读取或者文件写入操作(这里使用的函数以1中返回的$fp作为参数) 3.   调用fclose($fp)关闭关闭文件 二:使用fopen方法打开文

android文件写入和读取

//读写文件函数调用writeFileData(filename,datas); String result=readFileData(filename); Toast.makeText(Main2Activity.this,result.getClass().toString(),Toast.LENGTH_SHORT).show(); 下面是读写代码的实现: //文件写入 public void writeFileData(String filename, String content){ t

文件写入和读取

最近在提高自己编程能力,拿一些现实的小脚本练下.该脚本为python语言,主要涉及模块os. 功能:将控制台输入文字逐行保存,和读取. 输入逐行保存 import osfilename = input('please enter file name:')file = open(filename,'w')while True: aline = input('enter a line(q! 退出):') if aline != 'q!': file.write('%s%s' %(aline,os.l

归档解档(文件写入与读取)

**第一种方式:对象单一** //归档 -(void)NSKeyedArchiver{ NSArray *array = [NSArray arrayWithObjects:@"L",@"J",@"F",nil]; NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.LJF"]; NSLog(@"%@"

unity文件写入与读取

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.SceneManagement; using System; using System.IO; using System.Runtime.InteropServices; public class GridEditor : EditorWindow { public

C语言文件的读入与写入及C#基础函数学习[图]

C语言文件的读入与写入及C#基础函数学习[图]学了一学期的C语言,还不怎么会使用指针,文件的读入和写入也不能很顺利的写出来,说起来好惭愧.碰巧今天朋友让我帮他编写一个C语言程序,对他数模要用到的大量数据求平均值(每天不同时刻对某一物理量进行检测,持续几十天,求那些时刻测得的物理量的平均值).代码很简单,关键是要掌握怎样对文件进行读入和写入(当然对于菜鸡的我来说,懒惰让我在大一没有好好学习,正好趁着这个契机把文件的基本的操作学会:))分模块来编写还是很重要的,可以使程序看起来简洁明了.写了两个函数

文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

文件操作ofstream,open,close,ifstream,fin,依照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

 1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; //通过ofstream的方式实现写入文件 open,close void main() { ofstream fout;  //ofstream输出文件 fout.open("E:\\1.txt");//打开文件 fout << "1234abcdef";

VS2012+C语言+图形界面窗口+读取TXT文件+显示

#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define ID_TIMER 1 LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); //声明回调函数 int WINAPI WinMain(HINSTANCE hInstance, HINST