user-0 提问: 信息管理系统出错了，求指教

回复:
user: user-0
content: 不知道是我的运行环境有问题，还是啥，还是不能运行

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: if(atol(*numstr)==song[n].year)  改成；  if(atol(numstr)==atol(song[n].year))

user: user-3
content: #include<stdio.h> #include <stdlib.h> #include <string.h>    #define  MAX_STR_LEN    16 #define  MAX_NAME_LEN   32 #define  MAX_YEAR_LEN   32 #define  MAX_AUTHOR_LEN 32 #define  MAX_SINGER_LEN 32 #define  MAX_SNG_LEN    50   void input(); void del(); void liulan(); void searchname();  void menu();  struct song{     char name[MAX_NAME_LEN];     char year[MAX_YEAR_LEN];     char author[MAX_AUTHOR_LEN];     char singer[MAX_SINGER_LEN]; }song[MAX_SNG_LEN];  int main() {      //menu();      return 0; }  void input() {     FILE *fp;     int ch, record_cnt;     int i;      if(!(fp = fopen("song.txt","a"))) {         printf("can't open file song.txt");         return;         //exit(0);     }     printf("Please input a record:");     scanf ("%d", &record_cnt);     for (i = 0; i <= MAX_SNG_LEN && i < record_cnt; i++) {         printf("\nrecord%d:\n歌名:", i + 1);         fgets(song[i].name, MAX_NAME_LEN, stdin);         printf("\n时间:");         fgets(song[i].year, MAX_YEAR_LEN, stdin);         printf("\n作者:");         fgets(song[i].author, MAX_AUTHOR_LEN, stdin);         printf("\n歌手:");         fgets(song[i].singer, MAX_SINGER_LEN, stdin);          printf("继续输入吗?\n");         ch = getchar();         getchar();         if(ch == 'n') {             break;         }         fwrite(song, sizeof(song[0]), i, fp);         fclose(fp);     } }  /*If you write in one way, please read it use the same way. fwrite/fread, fscanf/fprintf. */ void del() {     int n, i, opt, flag = 0;     long a;     char namekey[8];     FILE* fp;      printf("\n请输入您要删除的歌曲名:");     scanf("%s", namekey);    /* addresss, array name is an address*/     if (!(fp=fopen("song.txt","r+"))) {         printf("\n不能打开该文件!");         return;   /* If open error then exit this function. */         //exit(0);     }     i = 0;     while(!feof(fp))     {         a = ftell(fp);         fscanf(fp,"%6s %5s %5s %10s\n",               song[i].name, song[i].year,               song[i].author, song[i].singer               );         i++;         if(strcmp(namekey,song[i].name) == 0) {             flag = 1;             break;         }     }     if(flag == 1) {         printf("\n已查到,记录为");         printf("\n%6s %5s %5s %10s\n",song[i].name, song[i].year, song[i].author, song[i].singer);         printf("\n确认删除,按1;不删除,按0:");         scanf("%d",&opt);         if(opt == 1)         {             fseek(fp, a, 0);             fprintf(fp,"%6s %5s %5s %10s\n"," "," "," "," ");         }     } else {         printf("\n对不起,查无此人");     }     fclose(fp); }  void liulan() {     FILE *fp;     int n = 0;      if(!(fp = fopen("song.txt","rb")))     {         printf("can't open the file song.txt");         return;         //exit(0);     }     printf("歌名\n作者\n歌手\n时间\n");     while(fread(&song[n],sizeof(song[0]),1,fp)==1)     {         printf("%6s %5s %10s %5s\n",song[n].name,song[n].year,song[n].author,song[n].singer);         n++;     }     fclose(fp); }  void searchname() {     FILE *fp;     int num;     char ch;     int i;     char numstr[MAX_STR_LEN];      if((fp=fopen("song.txt","rb"))==NULL)     {         printf("can not open the file.\n");         // exit(0);     }     while (fread(&song[i],sizeof(song[i]), 1, fp) == 1) {         i++;     }     num = i;     printf("用什么方式查询?\n");     printf("1.歌名 2.时间 3.歌手\n");     ch = getchar();     getchar();      switch(ch) {         case '1':             printf("输入你想要查的歌名:\n");             fgets(numstr, MAX_STR_LEN, stdin);             for (i = 0; i < num;) {                 if(!strcmp(numstr,song[i].name))                     break;                 i++;             }             break;         case'2':             printf("输入你想要查询的歌曲发行时间\n");             fgets(numstr, MAX_STR_LEN, stdin);             for(i = 0; i < num;)             {                 //if(atol(*numstr)==song[n].year)                 if(strcmp(song[i].year, numstr) == 0)                     break;                 i++;             }             break;         case'3':             printf("输入你要查的歌手\n");             fgets(numstr, MAX_STR_LEN, stdin);             for(i = 0; i < num;)             {                 if(!strcmp(numstr,song[i].singer))                     break;                 i++;             }             break;     }     printf("歌名 作者 歌手 时间\n");     printf("%6s %5s %5s %10s\n", song[i].name, song[i].year,song[i].author,song[i].singer);     fclose(fp);  }   问题不止一点点,我将你的程序里的warning和error都去掉了,不过有一个错误是没有定义menu. 对楼主一些建议,编程的提高不是写多少行代码,而是实实在在解决了多少问题,总结了多少方法.你写了这个程序大约近200行代码,你感觉自己从代码里学到什么东西了吗?除了敲这些代码带来手和少部分脑力的辛苦.总得来说编程能力不是有代码行数决定的. 楼主你这个程序实现了多个功能,为什么不能没实现一个函数,哪怕只是一个小小的功能,把它编译通过,并能运行出你想要的结果,然后在去实现下一个功能,一下子把所有功能都实现出来,等你编译之后出来这么多error和警告,自己头都大了吧与其这样,不如一步一步的去实现.前一步的正确作为后一步基础. 这个程序有问题再跟我发私信吧

user: user-4
content: if(atol(*numstr)==song[n].year)  改成；  if(atol(numstr)==atol(song[n].year))    你在语句前加句 printf("numstr = %d , song = %d , atol song = %d .\n ",atol(numstr) , song[n].year , atol(song[n].year)); 看看结果是否你要的if条件就明白了