c语言,从键盘上输入十个学生的有关数据,把它们转存到磁盘文件上。

存到记事本上只有姓名和地址是对的,学号和年龄都出错了,这是为什么?

#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
void save()
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("can't open the file\n");
exit(0);
}
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
printf("file write error");
fclose(fp);
}
int main()
{
int i;
printf("Please enter data of students:\n");
for(i=0;i<SIZE;i++)
{
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
}
return 0;
}

fwrite 是以二进制形式存进文件中,
记事本文件本身存的都是ASCII码,打开看时,把数据用对应的字符显示出来。

name 和 addr 本身是字符串,所以存起来可以看到正常的显示,因为字符串的实际值是其ASCII码,
另两个不是字符串,存是的数据本身,这么真接用记事本打开看是不行的。比如19,你存进去的就是19,显示时 ASCII码19对应的就是个乱码。
你得用 fprintf(fp,"%d",stud[i].age);来存

当然,如果只是把数据存入文件中为以后读取,而不是直接打开文件来看的话,这么存是OK 的,当成一个数据库。
读取时,用 fread就可以读出来。
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言从键盘输入10个学生姓名存入
}student[10];\/\/printf("%d",sizeof(wchar_t));int i;for(i=0;i<10;i++){ printf("请输入第%d个学生的信息:名字,学号,性别和年龄:\\n",i+1);scanf("%s%d%s%d",student[i].name,&student[i].num,student[i].sex,&student[i].age);} printf("十个学生的信息如下:\\n");fo...

...姓名,3门课的成绩,从键盘输入10个学生数据,
int i;printf("请输入10名学生的学号、姓名、及三门成绩:");for(i=0;i<10;i++)scanf("%d,%s,%d,%d,%d",&person[i]->number,person[i]->name,&person->score[0],&person->score[1],&person->score[2]);for(i=0,i<10;i++)person->score[3]=(person->score[0]+person->sc...

c语言中如何从键盘输入10个学生的成绩?
for (i = 0; i < 10; i++) { printf("请输入第%d个学生的成绩:", i + 1);scanf("%d", &scores[i]); \/\/ 从键盘输入成绩并存入数组中 } printf("输入的成绩为:\\n");for (i = 0; i < 10; i++) { printf("第%d个学生的成绩为:%d\\n", i + 1, scores[i]); \/\/...

C语言 从键盘输入10个学生信息(学号,姓名,年龄,性别)
include<stdio.h> void main(){ struct { char name[10];int num;char sex[2];int age;}s[10];int i;for(i=0;i<10;i++){ printf("请依次输入学生的姓名,学号,性别,年龄等信息");scanf("%s%d%s%d",s[i].name,&s[i].num,s[i].sex,&s[i].age);} for(i=0;i<10;i...

用c语言编写一个程序,从键盘输入10个学生成绩。
C语言:编写一个程序,从键盘输入10个学生成绩,求平均成绩。1、虽然main函数可以作为结构体或者类的成员函数,但相应地会失去作为程序出入口的功能。C++中全局main函数的书写格式与C语言完全相同,功能也完全相同,且同一C++程序同样只能有一个全局main函数。2、循环语句中进行10个数的累加在sum里面,然后在...

C语言 从键盘输入10个学生信息(学号,姓名,年龄,性别)
首先,我们需要包含库来使用标准输入输出函数。在主函数里,定义一个结构体`s`,包含四个成员:姓名(char数组`name[10]`), 学号(int类型`num`), 性别(char数组`sex[2]`), 和年龄(int类型`age`),并为10个学生创建一个数组。使用`for`循环,从键盘获取每个学生的姓名、学号、性别和年龄,通过`...

用C语言编写程序:从键盘输入10个学生的成绩,输出其最大值、最小值、和...
puts("请输入10个学生的成绩:");for(int i=0;i<10;i++){ scanf("%lf",&a[i]);} for(int i=0;i<10;i++){ sum+=a[i];i==0?max=a[0],min=a[0]:(maxa[i]?min=a[i]:NULL);} printf("所有元素的平均值为:%lf\\n",sum\/10);printf("最大值是%lf\\n",max);prin...

从键盘输入10个整数并将其存放到数组中,求平均值。C语言做
include <stdio.h> void main(){int a[10];int sum = 0;for (int i = 0; i < 10; i++){scanf("%d", &a[i]);sum += a[i];}double average = sum \/ 10.0;printf("%lf\\n",average);}

C语言从键盘输入10名同学的计算机成绩存入一维数组a,按从低到高的顺序...
将score[0]至score[9]中最大的放置于score[9]中。当i=1时,将score[0]至score[9-1]中最大的放置于score[9-1]中。当i时,将score[0]至score[9-i]中最大的放置于score[9-i]中。这是怎样做到的?这正是j循环做的事:顺次两两交换,将大的放于后面。所以,去掉j是不行的。

C语言数组从键盘输入10个整数存入数组,找出其中最大和最小值,并输出...
在C语言中,一个程序可以通过键盘输入10个整数,并将它们存储在一个数组中。接着,程序会找出数组中的最大值和最小值,并将这两个数值输出。以下是这个过程的代码实现:#include<stdio.h> intmain(){ inti;floatnum[10];printf("请输入10个数,每输入一个数按回车键结束:\\n");for(i=0;...

相似回答