常用的数据类型有字符型(char 型)、短整型(short 型)、整型(int 型)、长整型(long 型)、拓展长整型(long long 型)、单精度浮点型(float 型)、双精度浮点型(double 型)。问题围绕着数据类型与二进制文件展开。现有一个二进制文件,文件名为dict.dic,生成这个文件的C语言代码大概是这样的: 变量如下: char a,aa[5];//注意这里数组aa为正常使用的字符串,所以会包含字符'\0',它不需要输出 short b,bb[5]; int c,cc[5]; long d,dd[5]; long long e,ee[5]; float g,gg[5]; double h,hh[5]; int i ; 写入的代码段是这样: fwrite(&a,sizeof(a),1,fp); fwrite(&b,sizeof(b),1,fp); fwrite(&c,sizeof(c),1,fp); fwrite(&d,sizeof(d),1,fp); fwrite(&e,sizeof(e),1,fp); fwrite(&g,sizeof(g),1,fp); fwrite(&h,sizeof(h),1,fp); fwrite(aa,sizeof(a),5,fp); fwrite(bb,sizeof(b),5,fp); fwrite(cc,sizeof(c),5,fp); fwrite(dd,sizeof(d),5,fp); fwrite(ee,sizeof(e),5,fp); fwrite(gg,sizeof(g),5,fp); fwrite(hh,sizeof(h),5,fp); 这个代码段被连续执行了5次。当然每次写入的数据是不同的。 你的任务是从dict.dic中按照输入的顺序,读出7种单独变量,分别存到对应类型的变量中,假设为a、b、c、d、e、g、h。再从该文件中读出7个长度为5的数组,分别存到aa[5]、bb[5]、cc[5]、dd[5]、ee[5]、gg[5]、hh[5]中。最后将它们的值全部输出到屏幕上。 注意,所有变量均不会超过其存储范围。 内容提示:在本题对文件的操作内容中,会用到C语言文件操作函数,其打开文件的方式,如下: 1.FILE *fp=fopen("file.dat","rb");//"rb"为以只读方式打开二进制文件。 2.fread的样例代码: #include<stdio.h> int main() { int c,cc[5]={0}; FILE *fp=fopen("file.dat","rb"); fread(&c,sizeof(int),1,fp); //从fp指向的文件中读出一个整型变量 fread(cc,sizeof(int),5,fp); //从fp指向的文件中读出一个长度为5的整型数组。 fclose(fp); return 0; } 输入 为一个整数,只可能是1,2,3,4,5之一。 输出 将dict.dic中的相关内容输出到屏幕上,如果输入是1,则输出那段代码第一次写入的内容,如果输入是2,则输出
时间: 2024-01-25 20:04:04 浏览: 169
那段代码第二次写入的内容,依此类推。
好的,那么我们先根据输入的数字n来确定要读取的是哪一次写入的内容。具体的代码实现如下:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
FILE *fp = fopen("dict.dic", "rb");
if (fp == NULL) {
printf("Failed to open file.");
exit(1);
}
// 读取对应次数写入的数据
for (int j = 0; j < n; j++) {
char a, aa[5];
short b, bb[5];
int c, cc[5];
long d, dd[5];
long long e, ee[5];
float g, gg[5];
double h, hh[5];
fread(&a, sizeof(a), 1, fp);
fread(&b, sizeof(b), 1, fp);
fread(&c, sizeof(c), 1, fp);
fread(&d, sizeof(d), 1, fp);
fread(&e, sizeof(e), 1, fp);
fread(&g, sizeof(g), 1, fp);
fread(&h, sizeof(h), 1, fp);
fread(aa, sizeof(a), 5, fp);
fread(bb, sizeof(b), 5, fp);
fread(cc, sizeof(c), 5, fp);
fread(dd, sizeof(d), 5, fp);
fread(ee, sizeof(e), 5, fp);
fread(gg, sizeof(g), 5, fp);
fread(hh, sizeof(h), 5, fp);
}
// 输出读取到的数据
printf("%c\n", a);
printf("%hd\n", b);
printf("%d\n", c);
printf("%ld\n", d);
printf("%lld\n", e);
printf("%f\n", g);
printf("%lf\n", h);
printf("%s\n", aa);
for (int i = 0; i < 5; i++) {
printf("%hd ", bb[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%d ", cc[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%ld ", dd[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%lld ", ee[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%f ", gg[i]);
}
printf("\n");
for (int i = 0; i < 5; i++) {
printf("%lf ", hh[i]);
}
printf("\n");
fclose(fp);
return 0;
}
```
这个程序中,我们先使用`fopen`函数打开文件,并通过`fread`函数按照输入的n读取对应次数写入的数据。然后将读取到的数据输出到屏幕上,并最后使用`fclose`函数关闭文件。
需要注意的是,在输出字符数组`aa`时,我们使用了`%s`格式化输出。在这种情况下,`printf`函数会一直输出字符,直到遇到数组中的`'\0'`为止,所以我们不需要考虑数组中多余的字符。而在输出整型数组时,我们使用了`for`循环遍历数组中的每个元素,并输出。
阅读全文
相关推荐


















