新人菜鸟用VS2015做C语言出现问题,求各位大神解答!!!1

wk531170107 2015-09-13 04:45:37






#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define login 14062120

FILE *fp;
int n = 0;
void clean()
{
char getchar = '0';
while (getchar != '\n')
scanf_s("%c", &getchar);
return;

}

struct tongxunlu
{
char xingming[100];
char zhiwu[100];
char danwei[100];
char gudingdianhua[100];
char shouji[100];
char email[100];
char QQ[100];
char MSN[100];
}txl[200];

void readfile()
{
void tianjia();
void xiugai();
void chazhao();
void shanchu();
int ZCM, choice;
char ch;
FILE *fp;
if (( fopen_s(&fp,"c:\\通讯录.txt", "rb+")) == NULL) // rb+ 读写,为读写方式打开已存在的二进制文件
{
printf("通讯录不存在,请输入注册码");
scanf_s("%d", &ZCM);
if (ZCM == login)
{
if ((fopen_s(&fp,"c:\\通讯录.txt", "w")) == NULL)
{
printf("\n\t\t建立失败");
exit(0);
}
}
else
{
printf("注册码错误");
exit(0);
}
}

printf("\n\t-----------------欢迎使用通讯录管理系统------------------");
printf("\n\t 通讯录文件已建立 ");
printf("\n\t 按任意键进入主菜单 ");
printf("\n\t---------------------------------------------------------");
ch = getchar();
while (1)
{
n = fread(txl, sizeof(tongxunlu), 200, fp); //最大可读200个txl
fclose(fp);
printf("\n\t---------------------------------------------------------");
printf("\n\t- 1.添加联系人 2.查找联系人 -");
printf("\n\t- 3.删除联系人 4.修改联系人 -");
printf("\n\t- 5.保存并退出 -");
printf("\n\t- 欢迎%d 现在有联系人%d人 -", login, n);
printf("\n\t---------------------------------------------------------\n");
printf("请输入1,2,3,4,5:");
scanf_s("%d", &choice);
switch (choice)
{
case 1: tianjia(); break;
case 2: chazhao(); break;
/*case 3: shanchu(); break;
case 4: xiugai(); break;
case 5: exit(0); break;*/
}
}

}
void tianjia() //添加联系人
{
int i;
char a;
do
{
fopen_s(&fp,"c:\\通讯录.txt", "ab");
printf("\n\t\t---------------请输入联系人信息-----------------");
printf("\n\t\t输入联系人姓名:");
scanf_s("%s", txl[0].xingming);
printf("\n\t\t输入联系人职务:");
scanf_s("%s", txl[0].zhiwu);
printf("\n\t\t输入联系人单位:");
scanf_s("%s", txl[0].danwei);
printf("\n\t\t输入联系人固定电话:");
scanf_s("%s", txl[0].gudingdianhua);
printf("\n\t\t输入联系人手机:");
scanf_s("%s", txl[0].shouji);
printf("\n\t\t输入联系人邮箱:");
scanf_s("%s", txl[0].email);
printf("\n\t\t输入联系人QQ:");
scanf_s("%s", txl[0].QQ);
printf("\n\t\t输入联系人MSN:");
scanf_s("%s", txl[0].MSN);
fwrite(txl, sizeof(struct tongxunlu), 1, fp);
printf("\n\t\t是否继续添加联系人?(y/n):");
fclose(fp);
clean();
a = getchar();
} while (a == 'y');

return;
}
void chazhao() //查找联系人
{
fopen_s(&fp,"c:\\通讯录.txt", "rb+");
int i = 1;
char name[100];
printf("\n\t\t---------------请输入要查找联系人信息-----------------");
printf("\n\t\t输入查找的联系人的姓名:");
scanf_s("%s", name);
while (!feof(fp))

{
fread(txl, sizeof(tongxunlu), 1, fp);
if (strstr(txl[0].xingming, name))
{

i = 0;
printf("姓名:%s", txl[0].xingming);
printf("职务:%s", txl[0].zhiwu);
printf("单位:%s", txl[0].danwei);
printf("固定电话:%s", txl[0].gudingdianhua);
printf("手机:%s", txl[0].shouji);
printf("Email:%s", txl[0].email);
printf("QQ:%s", txl[0].QQ);
printf("MSN:%s", txl[0].MSN);
}
}
if (i)
printf("\n\n\t\t\t\t查无此人!!\n\n");

return;


}

void main()
{
void readfile();
readfile();
}
...全文
503 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-14
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
wk531170107 2015-09-13
  • 打赏
  • 举报
回复
引用 3 楼 dustpg的回复:
fp是空指针么, fopen你不检查返回值么
明白了些,感谢大神的解答!!
dustpg 2015-09-13
  • 打赏
  • 举报
回复
fp是空指针么, fopen你不检查返回值么
wk531170107 2015-09-13
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
lz没用过断言么, 断言失败, 空指针截断, 点击重试,再点击中断,顺着调用栈找空指针
以前一直用VC++6.0的,这个真的不知道。。。 提示好像是这个出了问题,但是我还是不知道怎么改。。 n = fread(txl, sizeof(tongxunlu), 200, fp);
dustpg 2015-09-13
  • 打赏
  • 举报
回复
lz没用过断言么, 断言失败, 空指针截断, 点击重试,再点击中断,顺着调用栈找空指针

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧