当前位置: 代码迷 >> C语言 >> 实训啦,问题多多~大家多多关照!
  详细解决方案

实训啦,问题多多~大家多多关照!

热度:231   发布时间:2006-06-27 09:16:39.0

#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#define MAX 3
struct day
{
int month;
int day1;
};
struct mydata
{
char name[20];
struct day birthday;
char telnum[20];
};
int main(void)
{
int f1,i=0,j;
char ch;
struct mydata *a[MAX],*p;

f1=open("C:\\list.bin",O_APPEND|O_WRONLY|O_BINARY);

if((f1!=-1))
{
do
{
printf("input the name:");
gets(a[i]->name);
printf("input the birthday(day):");
scanf(" %d",a[i]->birthday.day1);
printf("input the birthday(month):");
scanf(" %d",a[i]->birthday.month);
getchar();
printf("input the telphonenumber:");
gets(a[i]->telnum);
printf("still input (press n ou N to quie)?");
scanf(" %c",&ch);
getchar();
i++;
}while((ch!=78)&&(ch!=110)&&(i<MAX));

for(i=0;i<MAX-1;i++)
{
if(strcmp(a[i]->name,a[i+1]->name)>0)
{p=a[i];a[i]=a[i+1];a[i+1]=p;}
}
for(i=0;i<MAX;i++)
write(f1,&a[i],sizeof(a[i]));
close(f1);
printf("Data accepted!!\n");
}
else
printf("\nFile Opening Failure!!\n");
}

帮我看一下。我输入到DAY过后就出现系统错误。弹出该内存不能WRITTEN???
先建一个list.bin在C盘里哟~搞完这个再去看单内存。哈哈!

[此贴子已经被作者于2006-6-27 9:18:48编辑过]


----------------解决方案--------------------------------------------------------

/*帮楼主改了一下,请楼主再试再自添功能*/

#include<stdio.h>
#include<stdlib.h>

#define MAX 3 /*调试成了再改大数*/

struct day
{
short int month;
short int day1;
};
struct mydata
{
char name[20];
struct day birthday;
double telnum; /*用double记录11位电话号码*/
};

void creat1();
void input();
void output();

main()
{ while(1)
{
int i;
printf("0.return to system.\n");
printf("1.input the data.\n");
printf("2.output the data.\n");
printf("please choose:");
scanf("%d",&i);
getchar();
switch(i)
{
case 0: exit(0);
case 1: input();break;
case 2: output();break;
}
}
}

void input()
{
FILE* f1;
int i=0;
struct mydata a[MAX];
f1=fopen("c:\\phone.bin","wb");
if(f1==NULL)exit(1);
do
{
printf("input the name %d:",i+1);
gets(a[i].name);
printf("input the birthday(mm-dd):");
scanf("%d-%d",&a[i].birthday.month,&a[i].birthday.day1);
printf("input the telphone number:");
scanf("%ld",&a[i].telnum);
fflush(stdin);
fwrite(&a[i],sizeof(a[i]),1,f1);
}
while(++i<3);
fclose(f1);
printf("Data accepted!!\n");
}

void output()
{
FILE* f1; int i;
struct mydata a[MAX];

printf("File 3.bin contens:\n");
f1=fopen("c:\\phone.bin","rb");
if(f1==NULL)exit(2);
fread(a,sizeof(a[0]),MAX,f1);
fclose(f1);

for(i=0;i<MAX;i++)
{
printf("%s's birthday is %d.%d telphonenumber is %.0ld.\n",
a[i].name,a[i].birthday.month,a[i].birthday.day1,
a[i].telnum);
}
}


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-27 01:29:54
走刀口→超

等 级:贵宾
威 望:20
帖 子:5028
专家分:0
注 册:2006-3-14
  得分:0 
fflush(stdin);
请问这个是啥米?
----------------解决方案--------------------------------------------------------
以下是引用穆扬在2006-6-27 9:29:54的发言:
说的太明白
恐怕让你觉得太低估你的智力

1.scanf都忘记怎么用了么
scanf(" %d",a[i]->birthday.day1);
这种句子也写得出来?
2.把最初的函数丢掉不好
是头痛医脚
3.觉得你轻视基本概念
你的代码表明你经常基本概念不清楚

。。。是有点。觉得写得不够。。。

呼。。。。。。


----------------解决方案--------------------------------------------------------
回复:(走刀口→超)fflush(stdin);请问这个是啥米?...
以下是引用走刀口→超在2006-6-27 9:34:58的发言:
fflush(stdin);
请问这个是啥米?

当你不了解一条语句之时,最简单的办法就是将它/* */一下,看看运行情况有何变化。


----------------解决方案--------------------------------------------------------

/* */后并不能发现他的真正功能。

只觉得和getchar();差不多。

查函数得知,将缓冲区直接写入文件(文件以写方式打开)。必须打开着是不?

慢慢来。。。慢慢来。又有点急了。


----------------解决方案--------------------------------------------------------
回复:(走刀口→超)/* */后并不能发现他的真正功能。...
以下是引用走刀口→超在2006-6-27 9:56:53的发言:

/* */后并不能发现他的真正功能。

只觉得和getchar();差不多。

查函数得知,将缓冲区直接写入文件(文件以写方式打开)。必须打开着是不?

慢慢来。。。慢慢来。又有点急了。


/*fflush(stdin);*/
不是
fflush(stdin);/* */


----------------解决方案--------------------------------------------------------
不明白~

越来越晕了~T。T


----------------解决方案--------------------------------------------------------
年轻的齐桓公――小白

[此贴子已经被作者于2006-6-27 10:53:53编辑过]



----------------解决方案--------------------------------------------------------