亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3833 | 回復: 14
打印 上一主題 下一主題

這個C文件到底出錯在哪里,編譯時gets函數(shù)接受參數(shù)過多,還是…… [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-04-16 17:00 |只看該作者 |倒序瀏覽
編譯時卡在gets處,提示參數(shù)過多,如何修改通過編譯,請各位高人幫幫看看。。謝謝了。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #define STMAX 100  /*最大學生數(shù)*/

  6. struct student
  7. {
  8. char id[10];
  9. char name[20];
  10. char sex[10];
  11. float sorc[3];
  12. float aver;
  13. float sum;
  14. };

  15. FILE * fp=NULL;
  16. char filename[]="c:\\學生信息表.dat"; /*錄入的學生信息所存儲的文件*/

  17. /***************************函數(shù)聲明**********************/
  18. void showmenu();
  19. void inputinfo(struct student*);
  20. void aboutinfo(struct student*);
  21. void allinfo(struct student*);
  22. void delinfo(struct student*);
  23. int existRec(struct student*);

  24. /**********主函數(shù)***********/

  25. int main(int argc, char *argv[])
  26. {
  27.         struct student studentInfo[STMAX];
  28.         struct student * p_student;
  29.         int choice;
  30.         p_student=studentInfo;

  31.         /*********************顯示菜單************************/
  32.         showmenu();   /*顯示系統(tǒng)菜單*/
  33.         printf("\t\t 請選擇操作:");
  34.         /*********************輸入選項********************/
  35.         scanf("%d",&choice);
  36.         /***************如果輸入錯誤是否退出*************/
  37.         while(choice!=5);
  38.           {
  39.                   /********調用相應的功能*******/
  40.             switch(choice)
  41.                         {
  42.                         case 1:inputinfo(p_student);break;
  43.                         case 2:aboutinfo(p_student);break;
  44.                         case 3:allinfo(p_student);break;
  45.                         case 4:delinfo(p_student);break;
  46.                         case 5:break;
  47.                         default:printf("\n\t\t\ 請重新選擇(1~5):");
  48.                                 scanf("%d",&choice);
  49.                         //        continue;
  50.                         }
  51.                 showmenu();
  52.                 printf("\t\t 請選擇操作:");
  53.             scanf("%d",&choice);
  54.                 }
  55.           printf("\n\n\t\t 退出系統(tǒng)");

  56.        
  57. }


  58. /**************顯示系統(tǒng)菜單******************/
  59. void showmenu()
  60. {
  61.   system("cls");   //清屏
  62.   printf("\n\n\n");
  63.   printf("\t\t------------------------------------------------\n");
  64.   printf("\t\t|           學生信息管理系統(tǒng)                    |\n");
  65.   printf("\t\t------------------------------------------------\n");
  66.   printf("\t\t|           1.   錄入信息                       |\n");
  67.   printf("\t\t|                                               |\n");
  68.   printf("\t\t|           2.   查詢信息                       |\n");
  69.   printf("\t\t|                                               |\n");
  70.   printf("\t\t|           3.   瀏覽信息                       |\n");
  71.   printf("\t\t|                                               |\n");
  72.   printf("\t\t|           4.   刪除信息                       |\n");
  73.   printf("\t\t|                                               |\n");
  74.   printf("\t\t|           5.   退出系統(tǒng)                       |\n");
  75.   printf("\t\t------------------------------------------------\n");
  76.   //return();
  77. }

  78. /***********計算文件中現(xiàn)有的記錄數(shù)****************/
  79. int existRec(struct student * p_student)
  80. {
  81.   int count;
  82.   system("cls");
  83.   /*******打開文件***************/
  84.   /*******是否出錯***************/
  85. if((fp=fopen(filename,"rb"))==NULL)
  86.         {
  87.          /***************報告錯誤信息****/
  88.         printf("不能打開文件,請確認磁盤未滿或c:\\學生信息表.dat文件沒有損壞");
  89.         exit(0);
  90.          }
  91. rewind(fp);
  92. /***********讀入一條記錄*************/
  93. /***********是否成功*****************/
  94. for(count=0;fread(&p_student[count],sizeof(struct student),1,fp)==1;count++);
  95. /***********關閉文件*******************/
  96. fclose(fp);
  97. return count;

  98. }

  99. /**********************信息錄入*****************/
  100. void inputinfo(struct student *p_student)
  101. {
  102.   int count,j;
  103.   char ch;
  104.   float sum;
  105.   /*******************打開文件****************/
  106.   count=existRec(p_student);
  107.   /***************是否出錯****************/
  108.   if((fp=fopen(filename,"a+b"))==NULL)
  109.    /********************報告錯誤***************/
  110.           {
  111.           printf("不能打開文件,請確認文件存在!");
  112.           exit(0);
  113.           }
  114.         /**********************錄入學生信息*******************/
  115.   printf("\n\t 信息登記表\n");
  116.   printf("\n請輸入第%d個學生的信息(請使用英文或拼音)\n",count+1);
  117.   printf("-----------------------------------------");
  118.   printf("\n 學號:");

  119.   fflush(stdin);  /*清楚緩存,保證 scanf 輸入正確*/
  120.   /****************學號為0****************************/
  121.   while(count<STMAX&&gets(p_student[count].id)!=NULL&&p_student[count].id[0]!='\0')
  122.           {
  123.           printf("\n學號");
  124.           gets("%s",p_student[count].id);
  125.           printf("\n姓名");
  126.           gets("%s",p_student[count].name);   /*
  127.                                                *用gets時提示參數(shù)太多,只能接受一個輸入參數(shù)
  128.                                                *如何解決?問題點。
  129.                                                                                   */
  130.           printf("\n性別");
  131.           gets("%s",p_student[count].sex);
  132.           printf("\n英語成績:");
  133.           gets("%f",&p_student[count].sorc[0]);     //gets函數(shù)在接受非字符串時,必須用&符號
  134.           printf("\n高數(shù)成績:");
  135.           gets("%f",&p_student[count].sorc[1]);
  136.           printf("\n計算機成績:");
  137.           gets("%f",&p_student[count].sorc[2]);
  138.           printf("----------------------------------\n");
  139.           /***************************計算成績*********************/
  140.           sum=0;
  141.           for(j=0;j<3;j++)
  142.            sum=sum+p_student[count].sorc[j];   //計算總分 最好寫成 sum+=p_student[count].sorc[j]
  143.            p_student[count].sum=sum;
  144.            p_student[count].aver=sum/3.0;     //計算平均分
  145.            /************************下面開始存入數(shù)據文件*************************/
  146.            fwrite(&p_student[count++],sizeof(struct student),1,fp);

  147.            printf("\n是否寫入第%d個學生的信息(y/n)",count+1);
  148.            ch=getch();
  149.            if(ch=='y'||ch=='Y')
  150.                   {
  151.                     printf("%c\n--------------------------------",ch);
  152.                         printf("\n 學號:");
  153.                         fflush(stdin);
  154.                         continue;
  155.                   }
  156.            else
  157.                    {
  158.                    fclose(fp);
  159.                    printf("%c\n\n 信息錄入結束,按任意鍵返回!",ch);
  160.                    getch();
  161.                    //system("cls");
  162.                    return;
  163.                    }
  164.           }
  165.   fclose(fp);
  166.   printf("\n輸入有誤,終止信息錄入,按任意鍵返回!");
  167.   getch();
  168.   return;
  169. }

  170. /****************************查詢個人信息******************************/
  171. void aboutinfo(struct student *p_student)
  172. {
  173.   int i;
  174.   int count;
  175.   char ch;
  176.   char * temp=NULL;
  177.   
  178.   count=existRec(p_student);
  179.   if(!count)
  180.         {
  181.         printf("\n文件中記錄為空!");
  182.         getch();
  183.         return;
  184.         }
  185.   temp=(char*)malloc(10*sizeof(char));
  186.   printf("\n請輸入要查詢的學生學號:");
  187.   fflush(stdin);
  188.   while(gets(temp)!=NULL&&temp[0]!='\0')
  189.         {
  190.           for(i=0;i<count;i++)
  191.            {
  192.            if(!strcmp(temp,p_student[i].id))
  193.             {
  194.              printf("------------------------------\n");
  195.              printf("姓名:%s\n",p_student[i].name);
  196.                  printf("\n性別:%s\n",p_student[i].sex);
  197.              printf("\n英語:%.2f\n",p_student[i].sorc[0]);
  198.              printf("\n高數(shù):%.2f\n",p_student[i].sorc[1]);
  199.              printf("\n計算機:%.2f\n",p_student[i].sorc[2]);
  200.              printf("\n總分:%.2f\n",p_student[i].sum);
  201.              printf("\n平均分:%2f\n",p_student[i].aver);
  202.              printf("------------------------------\n");
  203.              break;
  204.                 }
  205.            }
  206.      if(i==count)
  207.        printf("\n沒有該學生!\n",ch);
  208.        printf("\n 查詢下一個學生的信息?(y/n)");
  209.      ch=getch();
  210.      if(ch=='y'||ch=='Y')
  211.       {
  212.           printf("%c\n\n 請輸入要查詢的學生學號:",ch);
  213.           fflush(stdin);
  214.           continue;
  215.           }
  216.      else
  217.       {
  218.           free(temp);
  219.           printf("%c\n\n 查詢結束,返回!",ch);
  220.           getch();
  221.           return;                         
  222.           }
  223.         }
  224.   free(temp);
  225.   printf("\n 輸入有誤,按任意鍵返回菜單!");
  226.   getch();
  227.   return;
  228. }


  229. /*************查詢所有信息*****************/
  230. void allinfo(struct student * p_student)
  231. {
  232.   int i;
  233.   int count;
  234.   count=existRec(p_student);
  235.   if(!count)
  236.    {
  237.    printf("\n\n 文件記錄為空!");
  238.    getch();
  239.    return;   
  240.    }            
  241.   printf("\n\t\t\t 學生信息查詢表\n\n");
  242.   printf("\t 以下是本系統(tǒng)所查詢到的所有學生信息,如果表中數(shù)據為空\n");
  243.   printf("\t 請確認數(shù)據是否成功錄入!\n");
  244.   printf("\n----------------------------------------------------");
  245.   for(i=0;i<count;i++)
  246.   {
  247.    printf("\n 您正查看第[%d]個學生的信息\n",i+1);
  248.    printf("\n學  號:%s\n",p_student[i].id);
  249.    printf("\n姓  名:%s\n",p_student[i].name);
  250.    printf("\n性  別:%s\n",p_student[i].sex);
  251.    printf("\n英  語:%.2f\n",p_student[i].sorc[0]);
  252.    printf("\n高  數(shù):%.2f\n",p_student[i].sorc[1]);
  253.    printf("\n計算機:%.2f\n",p_student[i].sorc[2]);
  254.    printf("\n總  分:%.2f\n",p_student[i].sum);
  255.    printf("\n平均分:%2f\n",p_student[i].aver);
  256.    printf("------------------------------\n");
  257.    printf("按任意鍵繼續(xù)瀏覽……!");
  258.    getch();
  259.   }
  260.   printf("\n\n 查詢結束,按任意鍵返回!");
  261.   getch();
  262.   return;          
  263. }

  264. /****************刪除信息*********************/
  265. void delinfo(struct student * p_student)
  266. {
  267. int i,j;
  268. int count;
  269. char ch;
  270. char* temp=NULL;
  271. count=existRec(p_student);
  272. if(!count)
  273.   {
  274.   printf("\n 不能讀取數(shù)據,請確認已經正確錄入或數(shù)據是否存在");
  275.   getch();
  276.   return;  
  277.   }
  278. temp=(char*)malloc(10*sizeof(char));
  279. printf("\n 請輸入要刪除的學生學號:");
  280. fflush(stdin);

  281. while(gets(temp)!=NULL&&temp[0]!='\0')
  282. {
  283.   for(i=0;i<count;i++)
  284.   {
  285.     if(!strcmp(temp,p_student[i].id))
  286.      {
  287.           printf("\n\n 確定要刪除%s的信息嗎? (y/n)",p_student[i].id);
  288.           ch=getch();
  289.           if(ch=='n'||ch=='N')
  290.            {
  291.            free(temp);
  292.            printf("%c\n\n 該操作被取消,請按任意鍵返回!",ch);
  293.            getch();
  294.            return;          
  295.            }
  296.      for(j=i;j<count;j++)
  297.        p_student[j]=p_student[j+1];  //從數(shù)組中刪除指定學生
  298.      count--;
  299.          if((fp=fopen(filename,"w+b"))==NULL)
  300.       {
  301.             free(temp);
  302.             printf("\n不能打開文件,請確認磁盤已滿或文件是否存在");
  303.                 getch();
  304.                 exit(1);
  305.           }
  306.            for(j=0;j<count;j++)
  307.            {
  308.             if(fwrite(&p_student[j],sizeof(struct student),1,fp)!=1)
  309.             break;
  310.            }
  311.            fclose(fp);
  312.          }
  313.    }
  314.   if(i==count)
  315.    printf("\n\n沒有該學生!\n",ch);
  316.   else
  317.   printf("%c\n\n\n 已成功刪除該學生的信息……\n",ch);
  318.   printf("\n刪除下一個學生信息 (y/n)");
  319.   ch=getch();
  320.   if(ch=='y'||ch=='Y')
  321.    {
  322.    printf("%c\n\n 請輸入你要刪除的學生學號:",ch);
  323.    fflush(stdin);
  324.    continue;
  325.    }
  326.    else
  327.    {
  328.    free(temp);
  329.    printf("%c\n\n 刪除結束,按任意鍵返回!",ch);
  330.    getch();
  331.    return;
  332.    }
  333. }
  334. free(temp);
  335. printf("\n 輸入有誤, 請按任意鍵返回菜單,重新選擇!");
  336. getch();
  337. return;
  338. }
復制代碼

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報告]
發(fā)表于 2012-04-16 17:02 |只看該作者
改成 scanf

論壇徽章:
0
3 [報告]
發(fā)表于 2012-04-16 17:05 |只看該作者
我改成scanf后,編譯通過,但是接受showmenu 選擇 任一 數(shù)字 進入相關菜單時,程序就停止響應了。

不知道問題出在哪里了。。能幫忙繼續(xù)看看否?謝謝。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
4 [報告]
發(fā)表于 2012-04-16 17:42 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽

論壇徽章:
0
5 [報告]
發(fā)表于 2012-04-16 17:53 |只看該作者
請教如何解決嘛,謝謝了。

論壇徽章:
23
雙魚座
日期:2013-08-30 09:25:19辰龍
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-03-15 10:51:5415-16賽季CBA聯(lián)賽之八一
日期:2016-05-31 09:38:3615-16賽季CBA聯(lián)賽之遼寧
日期:2017-08-31 14:59:2115-16賽季CBA聯(lián)賽之遼寧
日期:2017-12-06 14:12:3615-16賽季CBA聯(lián)賽之天津
日期:2019-01-02 15:25:4915-16賽季CBA聯(lián)賽之深圳
日期:2020-12-06 11:26:21獅子座
日期:2014-05-19 09:16:35技術圖書徽章
日期:2014-03-27 13:37:39技術圖書徽章
日期:2013-08-30 09:28:52
6 [報告]
發(fā)表于 2012-04-17 09:28 |只看該作者
沒有細看,新人路過,幫頂

菜單選擇項的輸入你可以用getch這個接收單字符,不回顯的函數(shù)啊,若是要用scanf輸入(你后面又有
getch)的話,就會出現(xiàn)回車符“吃不掉”的問題,處理起來又麻煩。

gets的用法:
  1. char *gets(char *s);

  2. fgets() reads in at most one less than size characters from stream and stores them into the  buffer  pointed
  3.        to  by  s.  Reading stops after an EOF or a newline.  If a newline is read, it is stored into the buffer.  A
  4.        '\0' is stored after the last character in the buffer.
復制代碼
PS:你這是TC程序還是VC程序,記得getch這個函數(shù)兩者有差別。

論壇徽章:
0
7 [報告]
發(fā)表于 2012-04-17 10:31 |只看該作者
dev c++ 編譯的 4.9.9的版本。 之前沒發(fā)帖的時候是將 輸入改成scanf的,但在菜單選擇的時候,提交就沒有響應了。 所以發(fā)過來讓大家看看。

這個例子是 清華大學出版社 出版的一本叫《程序設計基礎-C語言版》 作者 高克寧。
最后的例子是這個,我抄錄了一遍,剛開始編譯的時候錯誤很多,改了一些,還是有錯誤。
書中沒提到 該例子原來的編譯環(huán)境。  我是在dev c中編譯的。

能幫忙看看問題出在哪里了否,也是剛學習,有點混亂了:)

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
8 [報告]
發(fā)表于 2012-04-17 10:46 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽

論壇徽章:
0
9 [報告]
發(fā)表于 2012-04-17 11:16 |只看該作者
好幾本書一起翻:
1> C和指針
2> C程序設計語言英文版的書+中文版的chm

加上這本 程序設計基礎-c語言版 高克寧
借鑒和比較的看,主要參考 1和2 。

論壇徽章:
2
程序設計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
10 [報告]
發(fā)表于 2012-04-17 11:22 |只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP