一道C语言的有关问题,从键盘输入四个学生的信息,然后在屏幕上显示和输出到磁盘上
一道C语言的问题,从键盘输入四个学生的信息,然后在屏幕上显示和输出到磁盘上
#include<stdio.h>
#include<stdlib.h>
void main()
{
struct stu
{
int num;
char name[20];
char sex;
int age;
}
student[100];
FILE * out;
int i;
if((out=fopen("stu_info.txt","w"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
printf("Enter data:\n");
for(i=0;i<4;i++)
{
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
getchar();
}
for(i=0;i<4;i++)
{
printf("%d,%s,%c,%d\n",student[i].num,student[i].name,student[i].sex,student[i].age);
}
for(i=0;i<4;i++)
{
fwrite(&student[i],1,sizeof(struct stu),out);
fputc('\n',out);
}
fclose(out);
}
程序执行结果是屏幕上显示的每个学生的信息后都会多出一个?-858993460,而输出到磁盘上的文件时没有学生的num值,而且每个学生age后面跟的一些乱码,我看了好几遍也没有看出问题所在,请各路高手支援支援。多谢各位!
------解决方案--------------------
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
//这行scanf时你出问题了吧?你并没有输入","?
------解决方案--------------------
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
把这句改成如下:
scanf("%d%s%c%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
不同数据之间用空格隔开。
------解决方案--------------------
我也曾经出现过~~貌似是因为2进制流文件的问题。你可以通过fwrite函数先写到磁盘上,然后再用fread读就可以了。。如果你光在本地磁盘定义一个文本。里面写一些数据。然后读到屏幕上~是会出现乱的数。。
#include<stdio.h>
#include<stdlib.h>
void main()
{
struct stu
{
int num;
char name[20];
char sex;
int age;
}
student[100];
FILE * out;
int i;
if((out=fopen("stu_info.txt","w"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
printf("Enter data:\n");
for(i=0;i<4;i++)
{
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
getchar();
}
for(i=0;i<4;i++)
{
printf("%d,%s,%c,%d\n",student[i].num,student[i].name,student[i].sex,student[i].age);
}
for(i=0;i<4;i++)
{
fwrite(&student[i],1,sizeof(struct stu),out);
fputc('\n',out);
}
fclose(out);
}
程序执行结果是屏幕上显示的每个学生的信息后都会多出一个?-858993460,而输出到磁盘上的文件时没有学生的num值,而且每个学生age后面跟的一些乱码,我看了好几遍也没有看出问题所在,请各路高手支援支援。多谢各位!
------解决方案--------------------
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
//这行scanf时你出问题了吧?你并没有输入","?
------解决方案--------------------
scanf("%d,%s,%c,%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
把这句改成如下:
scanf("%d%s%c%d",&student[i].num,student[i].name,&student[i].sex,&student[i].age);
不同数据之间用空格隔开。
------解决方案--------------------
我也曾经出现过~~貌似是因为2进制流文件的问题。你可以通过fwrite函数先写到磁盘上,然后再用fread读就可以了。。如果你光在本地磁盘定义一个文本。里面写一些数据。然后读到屏幕上~是会出现乱的数。。