user-0 提问: 这段在Dev C++上没问题但是在Visual C++上过不了编译

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 关于文件打开那段，这么写，供参考：fp1=fopen("record.txt","a");//如果不存在record.txt就创建一个  if (fp1==NULL)         {               printf("文件打开失败!\n");               exit(0);              //fp2=fopen("record.txt","w");             //fclose(fp2);         }

user: user-3
content: 这一段作为一个函数，在vc6上正常编译运行的。最好把错误信息或者代码贴上来

user: user-4
content: 从这个例子上看，懵懂时期的初学者严格遵循ANSI/C90利大于弊。

user: user-2
content: 对void save(struct student *head) 、struct student *load(void)、main()函数里做了修改，供参考：//这是全代码 #include <string.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h>//包含system函数头文件 #define LEN sizeof(struct student) struct student {         char num[20]; 		//ID号码         char name[100]; 		//联系人姓名         char phone[20]; 		//联系人电话号码         char home[100]; 		//联系人通讯地址         char birthday[20]; 		//联系人生日         struct student *next; };  void face(void) //功能选择面板 {         printf("********************************************************************");         printf("\t\t\t\t☆★☆★☆★  ~_~  ~_~  ~_~  ☆★☆★☆★\n");         printf("\n\t\t\t☆★欢迎使用<查找联系人>☆★");         printf("\n\n\t☆★选择你需要操作的功能:☆★(若添加联系方式，建议完善联系人信息)★☆\n");         printf("\n");         printf("\t\t\t1.【增加联系人信息〗\n");         printf("\t\t\t2.〖显示<查找联系人>中所有记录】\n");         printf("\t\t\t3.【删除需要删除的信息〗\n");         printf("\t\t\t4.〖以名字查询所需的信息】\n");         printf("\t\t\t5.【保存<查找联系人>中的所有记录到指定文件中〗\n");         printf("\t\t\t6.〖退出不保存!!】\n");         printf("\n");         printf("\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");         printf("\n\n********************************************************************\n\n"); } void print(struct student *head) {         struct student *p;         p=head;         system("CLS"); 		//调用DOS命令CLS能够清屏         printf("*************************************************************\n");         printf("==================== → 联系人信息记录表 ← ===================\n");         printf("*************************************************************\n");         if(head!=NULL)                 do                 {                         printf("联系人ID号码:%s\n",p->num);                         printf("联系人姓名:%s\n",p->name);                         printf("联系人电话号码:%s\n",p->phone);                         printf("联系人地址:%s\n",p->home);                         printf("联系人生日:%s\n",p->birthday);                         printf("********************************************************\n");                         p=p->next;                 } 				while(p!=NULL);         else         {             printf("抱歉!!无法找到该联系人!!\n\n");             printf("=============================================================\n");         } } //增添电子通讯录中的内容，即创建连表过程 struct student *append(struct student *head) {         struct student *p0=NULL,*p1,*p2; 		//p0为要插入的新节点         p1=head;         p2=head;         system("CLS");         printf("\n\n***********************************************************\n");         printf("\t\t你能在此目录下创建并添加联系人信息");         printf("\n***********************************************************\n");         p0=(struct student *)malloc(LEN);         printf("请输入联系人ID号码:");         gets(p0->num);         printf("请输入联系人姓名:");         gets(p0->name);         printf("请输入联系人电话号码:");         gets(p0->phone);         printf("请输入联系人地址:");         gets(p0->home);         printf("请输入联系人生日:");         gets(p0->birthday);                  if(head==NULL) //对插入的节点排序，按姓名的拼音顺序         {            head=p0;            p0->next=NULL;         }         else         {            while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))            {                p2=p1;                p1=p1->next;            }            if((strcmp(p0->name,p1->name))<=0)            {               if(head==p1)                  head=p0;               else                  p2->next=p0;               p0->next=p1;            }            else            {               p1->next=p0;               p0->next=NULL;            }            printf("成功添加联系人信息!!");            printf("\n************************************************************\n");            printf("\n\n");         }         return(head);        }  //查找联系人的维护（删除），通过输入联系人ID号码删除联系人数据 struct student *del(struct student *head) {         struct student *p1,*p2;         char num[12];         system("CLS");         printf("\n\n************************************************************\n");         printf("================= → 联系人信息记录删除功能 ← ===============\n");         printf("************************************************************\n");         printf("输入要删除的联系人ID号码:");         gets(num);          p1=head;         if (head==NULL)                 {             		printf("抱歉!!无法找到该联系人!!\n");                         printf("\n*******************************************************\n");                     return(head);                 }         while(p1!=NULL)         {                 if(strcmp(p1->num,num)==0)                 {                         if(p1==head)                         head=p1->next;                         else p2->next=p1->next;                         free(p1);                         printf("删除成功!!\n");                         return(head);                 }                 p2=p1;                 p1=p1->next;         }         printf("对不起!!没有要删除的联系人纪录!!\n");         return(head); }  //电子通讯录的查找，关键字为用户姓名； void search(struct student *head) {         struct student *p1,*p2;         char name[20];         p1=head;         p2=p1;         system("CLS");         printf("\n**************************************************************\n");                 printf("================ → 联系人信息记录查询功能 ← ==================\n");         printf("**************************************************************\n");         printf("输入要查找联系人的姓名:");         gets(name);         while(p1!=NULL)         {                 if(strcmp(p1->name,name)==0)                 {                        printf("联系人ID号码:");                                 puts(p1->num);                         printf("联系人姓名:");                                puts(p1->name);                         printf("联系人电话号码:");                                 puts(p1->phone);                        printf("联系人地址:");                                 puts(p1->home);                        printf("联系人生日:");                                puts(p1->birthday);                       printf("\n=============================================================\n");                                         break;                 }                 p2=p1;                 p1=p1->next;         }         if(p1==NULL)                 printf("对不起!!没有该联系人的纪录!!\n");  } //电子通讯录的记录存盘操作，使用文件指针； void save(struct student *head) {         FILE *fp,*fp1;         struct student *p;         p=head;                 fp1=fopen("record.txt","w");         //fp1=fopen("record1.txt","w");         //fprintf(fp1,"=============== → 用户信息记录表 ← =================\n");          while(p!=NULL)         {                 //首先把数据保存在record.txt中，这是提供给load函数用的数据                 //fprintf(fp," %s %s %s %s %s %s",p->num,p->name,p->phone,p->email,p->home,p->birthday);                 //然后把数据保存在record1.txt中，这是能提供直接查询看的，有比较友好的画面                 //fprintf(fp1,"====================================================\n");                 fprintf(fp1,"%s\n",p->num);//联系人ID号码:                 fprintf(fp1,"%s\n",p->name);//联系人姓名:                 fprintf(fp1,"%s\n",p->phone);//联系人电话：                 fprintf(fp1,"%s\n",p->home); //联系人家庭地址:                 fprintf(fp1,"%s\n",p->birthday);//联系人出生日期:                 p=p->next;         }               //fprintf(fp1,"*************************************************************\n");         fclose(fp1);         fclose(fp);         printf("\n\n成功储存，你能在record1.txt找到相应信息\n");         printf("**************************************************************\n");         printf("PRESS ANY KEY TO EXIT.\n\n");         getchar();         exit(1); } //电子通讯录的记录读盘操作，使用文件指针； struct student *load(void) {         FILE *fp;         struct student *head=NULL,*p1=NULL,*p2=NULL;         char   c;         int    i;         fp=fopen("record.txt","a+");         if(fp==NULL){            printf("Open File fail!\n");            exit(0);         }         while(1)//for(i=1;(c=fgetc(fp))!=-1;i++)         {                 p1=(struct student *)malloc(LEN);                 if(fscanf(fp,"%s\n",p1->num)!=1) break;                 fscanf(fp,"%s\n",p1->name);                 fscanf(fp,"%s\n",p1->phone);                 fscanf(fp,"%s\n",p1->home);                 fscanf(fp,"%s\n",p1->birthday);//p1->email                 p1->next = NULL;                 if(head==NULL){  //if(i==1)                    head=p1;                    p2=p1;                 }                 else{                    p2->next=p1;                    p2=p1;                 }         }         //if(p1==NULL){         //   fclose(fp);         //   return(head);         //}         //p2->next=NULL;         fclose(fp);         return(head); }  main() {         struct student *head=NULL;         //FILE *fp1,*fp2;         int c; 		//功能选择需要的号码         system("cls");         system("color  2f");         system("cls");         //if ((fp1=fopen("record.txt","r"))==NULL)         //{         //        printf("error\n");                //exit(0);                //fp2=fopen("record.txt","w"); 			//如果不存在record.txt就创建一个               //fclose(fp2);         //}         head=load();         while(1)         {                 face();                 printf("选择你需要操作的功能号码:");                 scanf("%d",&c);                 getchar();                 switch(c)                 {                        case 1:head=append(head);break;                        case 2:print(head);break;                        case 3:head=del(head);break;                        case 4:search(head);break;                        case 5:save(head);break;                        case 6:exit(0);break;                      default :printf("Enter error!!\n");                 }                 //printf("*****************\n");                 printf("◇◆请按ENTER返回功能操作菜单◇◆\n");                 //printf("*****************\n");                 getchar();                 system("CLS");         } } //指定控制台输出的颜色属性// //颜色属性由两个十六进制数字指定 -- 第一个为背景，第二个则为// //前景。每个数字可以为以下任何值之一://  //0 = 黑色 8 = 灰色// //1 = 蓝色 9 = 淡蓝色// //2 = 绿色 A = 淡绿色// //3 = 湖蓝色 B = 淡浅绿色// //4 = 红色 C = 淡红色// //5 = 紫色 D = 淡紫色// //6 = 黄色 E = 淡黄色// //7 = 白色 F = 亮白色//

user: user-5
content: if ((fp1=fopen("record.txt","r"))==NULL)          {                fp2=fopen("record.txt","w");             //如果不存在record.txt就创建一个               fclose(fp2);         } 如果打开失败，为什么还要调用fclose呢，打开失败直接返回          FILE *fp1,*fp2;         int c;     struct student *head=NULL;         //功能选择需要的号码         system("cls");         system("color  2f");         system("cls");          //struct student *head=NULL;         if ((fp1=fopen("record.txt","r"))==NULL)          {                fp2=fopen("record.txt","w");             //如果不存在record.txt就创建一个               fclose(fp2);         }         head=load(); 在定义时，把head的位置放在system函数之前。Dev C++编译没问题，而Visual C++有问题，可能是编译器版本的原因，应该是Visual C++版本比较老吧～

user: user-6
content: 试试在最开始加上 #include "stdafx.h"

user: user-0
content: //这是全代码 #include <string.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h>//包含system函数头文件 #define LEN sizeof(struct student) struct student {         char num[20]; 		//ID号码         char name[100]; 		//联系人姓名         char phone[20]; 		//联系人电话号码         char home[100]; 		//联系人通讯地址         char birthday[20]; 		//联系人生日         struct student *next; }; void face(void) //功能选择面板 {         printf("********************************************************************");         printf("\t\t\t\t☆★☆★☆★  ~_~  ~_~  ~_~  ☆★☆★☆★\n");         printf("\n\t\t\t☆★欢迎使用<查找联系人>☆★");         printf("\n\n\t☆★选择你需要操作的功能:☆★(若添加联系方式，建议完善联系人信息)★☆\n");      printf("\n");         printf("\t\t\t1.【增加联系人信息〗\n");     printf("\t\t\t2.〖显示<查找联系人>中所有记录】\n");         printf("\t\t\t3.【删除需要删除的信息〗\n");         printf("\t\t\t4.〖以名字查询所需的信息】\n");         printf("\t\t\t5.【保存<查找联系人>中的所有记录到指定文件中〗\n");         printf("\t\t\t6.〖退出不保存!!】\n");      printf("\n");         printf("\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");       printf("\n\n********************************************************************\n\n"); } void print(struct student *head) {         struct student *p;         p=head;         system("CLS"); 		//调用DOS命令CLS能够清屏         printf("*************************************************************\n");         printf("==================== → 联系人信息记录表 ← ===================\n");         printf("*************************************************************\n");         if(head!=NULL)                 do                 {                         printf("联系人ID号码:%s\n",p->num);                         printf("联系人姓名:%s\n",p->name);                         printf("联系人电话号码:%s\n",p->phone);                         printf("联系人地址:%s\n",p->home);                         printf("联系人生日:%s\n",p->birthday);                         printf("********************************************************\n");                         p=p->next;                 } 				while(p!=NULL);         else         {             printf("抱歉!!无法找到该联系人!!\n\n");             printf("=============================================================\n");         } } //增添电子通讯录中的内容，即创建连表过程 struct student *append(struct student *head) {         struct student *p0=NULL,*p1,*p2; 		//p0为要插入的新节点         p1=head;         p2=head;         system("CLS");         printf("\n\n***********************************************************\n");         printf("\t\t你能在此目录下创建并添加联系人信息");         printf("\n***********************************************************\n");                 p0=(struct student *)malloc(LEN);       printf("请输入联系人ID号码:");                         gets(p0->num);                 printf("请输入联系人姓名:");                         gets(p0->name);                 printf("请输入联系人电话号码:");                         gets(p0->phone);                 printf("请输入联系人地址:");                         gets(p0->home);                 printf("请输入联系人生日:");                         gets(p0->birthday);             //对插入的节点排序，按姓名的拼音顺序                 if(head==NULL)                 { 				head=p0;p0->next=NULL; 				}                 else                 {                         while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))                                 { 									p2=p1;p1=p1->next; 								}                         if((strcmp(p0->name,p1->name))<=0)                         {                                 if(head==p1)                                         head=p0;                                 else                                         p2->next=p0;                                 p0->next=p1;                         }                         else                                 { 									p1->next=p0;p0->next=NULL; 								}                  printf("成功添加联系人信息!!");                 printf("\n************************************************************\n");                 printf("\n\n");                  }         return(head);        }  //查找联系人的维护（删除），通过输入联系人ID号码删除联系人数据 struct student *del(struct student *head) {         struct student *p1,*p2;         char num[12];         system("CLS");         printf("\n\n************************************************************\n");         printf("================= → 联系人信息记录删除功能 ← ===============\n");         printf("************************************************************\n");         printf("输入要删除的联系人ID号码:");         gets(num);          p1=head;         if (head==NULL)                 {             		printf("抱歉!!无法找到该联系人!!\n");                         printf("\n*******************************************************\n");                     return(head);                 }         while(p1!=NULL)         {                 if(strcmp(p1->num,num)==0)                 {                         if(p1==head)                         head=p1->next;                         else p2->next=p1->next;                         free(p1);                         printf("删除成功!!\n");                         return(head);                 }                 p2=p1;                 p1=p1->next;         }         printf("对不起!!没有要删除的联系人纪录!!\n");         return(head); }  //电子通讯录的查找，关键字为用户姓名； void search(struct student *head) {           struct student *p1,*p2;         char name[20];         p1=head;         p2=p1;         system("CLS");         printf("\n**************************************************************\n");                 printf("================ → 联系人信息记录查询功能 ← ==================\n");         printf("**************************************************************\n");         printf("输入要查找联系人的姓名:");         gets(name);         while(p1!=NULL)         {                 if(strcmp(p1->name,name)==0)                 {                        printf("联系人ID号码:");                                 puts(p1->num);                         printf("联系人姓名:");                                puts(p1->name);                         printf("联系人电话号码:");                                 puts(p1->phone);                        printf("联系人地址:");                                 puts(p1->home);                        printf("联系人生日:");                                puts(p1->birthday);                       printf("\n=============================================================\n");                                         break;                 }                 p2=p1;                 p1=p1->next;         }         if(p1==NULL)                 printf("对不起!!没有该联系人的纪录!!\n");          } //电子通讯录的记录存盘操作，使用文件指针； void save(struct student *head) {         FILE *fp,*fp1;         struct student *p;         p=head;                 fp=fopen("record.txt","w");         fp1=fopen("record1.txt","w");         fprintf(fp1,"=============== → 用户信息记录表 ← =================\n");                  while(p!=NULL)         {                 //首先把数据保存在record.txt中，这是提供给load函数用的数据                 //fprintf(fp," %s %s %s %s %s %s",p->num,p->name,p->phone,p->email,p->home,p->birthday);                 //然后把数据保存在record1.txt中，这是能提供直接查询看的，有比较友好的画面                 fprintf(fp1,"====================================================\n");                 fprintf(fp1,"联系人ID号码:%s\n",p->num);                 fprintf(fp1,"联系人姓名:%s\n",p->name);                 fprintf(fp1,"联系人电话:%s\n",p->phone);                 fprintf(fp1,"联系人家庭地址:%s\n",p->home);                 fprintf(fp1,"联系人出生日期:%s\n",p->birthday);                 p=p->next;         }         fprintf(fp1,"*************************************************************\n");         fclose(fp1);         fclose(fp);         printf("\n\n成功储存，你能在record1.txt找到相应信息\n");         printf("**************************************************************\n");         printf("PRESS ANY KEY TO EXIT.\n\n");         getchar();         exit(1); } //电子通讯录的记录读盘操作，使用文件指针； struct student *load(void) {         FILE *fp;         struct student *head=NULL,*p1=NULL,*p2=NULL;         char c;         int i;         fp=fopen("record.txt","r");         for(i=1;(c=fgetc(fp))!=-1;i++)         {                 p1=(struct student *)malloc(LEN);                 //fscanf(fp,"%s %s %s %s %s %s",p1->num,p1->name,p1->phone,p1->email,p1->home,p1->birthday);                 if(i==1)                 { 				 head=p1;p2=p1; 				}                 else                 { 				  p2->next=p1;p2=p1; 				}         }         if(p1==NULL)         { 	    	fclose(fp);return(head); 		}         p2->next=NULL;         fclose(fp);         return(head); }  main() {         FILE *fp1,*fp2;         int c; 		//功能选择需要的号码         system("cls");         system("color  2f");         system("cls");          struct student *head=NULL;         if ((fp1=fopen("record.txt","r"))==NULL)          {                fp2=fopen("record.txt","w"); 			//如果不存在record.txt就创建一个               fclose(fp2);         }         head=load();         while(1)         {                 face();                 printf("选择你需要操作的功能号码:");                 scanf("%d",&c);                 getchar();                 switch(c)                 {                 case 1:head=append(head);break;               case 2:print(head);break;                 case 3:head=del(head);break;                 case 4:search(head);break;               case 5:save(head);break;                case 6:exit(0);break;                 default :printf("Enter error!!\n");                         }                 //printf("*****************\n");                 printf("◇◆请按ENTER返回功能操作菜单◇◆\n");                 //printf("*****************\n");                 getchar();                 system("CLS");         }  } //指定控制台输出的颜色属性// //颜色属性由两个十六进制数字指定 -- 第一个为背景，第二个则为// //前景。每个数字可以为以下任何值之一://  //0 = 黑色 8 = 灰色// //1 = 蓝色 9 = 淡蓝色// //2 = 绿色 A = 淡绿色// //3 = 湖蓝色 B = 淡浅绿色// //4 = 红色 C = 淡红色// //5 = 紫色 D = 淡紫色// //6 = 黄色 E = 淡黄色// //7 = 白色 F = 亮白色//

user: user-0
content: 引用 2 楼 浪客 的回复:这一段作为一个函数，在vc6上正常编译运行的。最好把错误信息或者代码贴上来

user: user-0
content: 引用 1 楼 qzjhjxj的回复:这代码不全，没头没尾呀？ 我只贴了主程序，全部的太长了，只有这一段出现了错误

user: user-2
content: 这代码不全，没头没尾呀？