一、习题
1、编写程序,要求在磁盘中建立一个文本文件text.txt,并往文本文件中输入任意一段文字;
#include <stdio.h>
#include <stdlib.h>
int main(){
char s[100];
FILE *fp;
fp=fopen("test.txt","w+");
if(fp==NULL)
{
printf("文件打开错误");
exit(1);
}
else{
scanf("%s",s);
fprintf(fp,"%s",s);
}
fclose(fp);
return 0;
}
2、将题1中的第1,3,5,7个字符读出来,并显示在屏幕上
#include <stdio.h>
#include <stdlib.h>
int main(){
char ch;
FILE *fp;
fp=fopen("test.txt","r");
if(fp==NULL)
{
printf("文件打开错误");
exit(1);
}
else{
for(int i=1;i<8;i+=2)
{
fseek(fp,i*1L,0);
ch=fgetc(fp);
printf("%c",ch);
}
}
fclose(fp);
return 0;
}
3、建立一个磁盘文件,记录学生的信息包含学号、姓名、性别等信息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char no[10];
char name[10];
double foreign;
double spec1;
double spec2;
double total;
} StudentType;
void WriteToFile(void);
void ReadFromFile(void);
int main(void)
{
int select;
do
{
printf("1.录入成绩 2.输出成绩 0.退出\n");
printf("请输入要执行的操作: ");
scanf("%d", &select);
switch (select)
{
case 1:
WriteToFile();
break;
case 2:
ReadFromFile();
break;
default:
printf("退出程序!\n");
break;
}
} while (select == 1 || select == 2);
return 0;
}
void WriteToFile(void)
{
FILE *fp = NULL;
StudentType stu;
char flag = 'y';
fp = fopen("student.txt", "a");
if (fp == NULL)
{
printf("文件打开失败!\n");
exit(1); //有错的方式退出
}
while (flag == 'y' || flag == 'Y')
{
printf("请输入考生考号: ");
scanf("%s", stu.no);
printf("请输入考生姓名: ");
scanf("%s", stu.name);
printf("请输入考生外语成绩: ");
scanf("%lf", &stu.foreign);
printf("请输入考生专业课1成绩: ");
scanf("%lf", &stu.spec1);
printf("请输入考生专业课2成绩: ");
scanf("%lf", &stu.spec2);
stu.total = stu.foreign + stu.spec1 + stu.spec2;
fprintf(fp, "%10s%10s%8.2f", stu.no, stu.name, stu.foreign);
fprintf(fp, "%8.2f%8.2f%8.2f", stu.spec1, stu.spec2, stu.total);
fputc('\n', fp);
fflush(stdin);
printf("继续输入吗?继续请输入y或Y: ");
scanf("%c", &flag);
}
fclose(fp);
return;
}
void ReadFromFile(void)
{
FILE *fp = NULL;
StudentType stu;
fp = fopen("student.txt", "r");
if (fp == NULL)
{
printf("文件打开失败!\n");
exit(1);
}
printf("%10s%8s\n", "考生姓名", "总分");
while (!feof(fp))
{
fscanf(fp, "%s%s", stu.no, stu.name);
fscanf(fp, "%lf%lf%lf%lf", &stu.foreign, &stu.spec1, &stu.spec2, &stu.total);
if (strlen(stu.name) != 0)
{
printf("%10s%8.2f\n", stu.name, stu.total);
strcpy(stu.name, "");
}
}
fclose(fp);
return;
}