首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于文件操作,该怎么解决

2012-03-13 
关于文件操作我编写的一个关于C语言文件操作的程序段,但是运行却得不到预期结果,调试过感觉是输入输出文件

关于文件操作
我编写的一个关于C语言文件操作的程序段,但是运行却得不到预期结果,调试过感觉是输入输出文件操作那个地方出错,但是却不知道错在哪里,请大家帮忙看下,谢谢了!!
      其他操作函数我没写上,就下面这个程序段,大家帮忙看看!!

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

struct   student                 /*   学生档案   */
{     char   num[10];             /*   学号   */
      char   name[12];           /*   姓名   */
      char   sex[4];               /*   性别   */
      char   tel[15];             /*   电话   */
      char   addr[50];
};

char   filename[30];             /*   学生信息表名   */
FILE   *fp;

void   ListCreate();             /*   建立信息表   */
void   ListAdd();                   /*   添加   */
void   ListSearch();             /*   查找   */
void   ListModify();             /*   修改   */
void   ListDelete();             /*   删除   */
void   ListPrint();               /*   输出   */
void   exit();                         /*   退出   */

/*------------------------------------主函数----------------------------------------*/
void   main()
{     struct   student   stu;             /*   链表结构体变量*/
      int   n;
      ListCreate();
      while(1)
      {     printf( "\nAdd         :(Please   enter   1) ");
            printf( "\nSearch:(Please   enter   2) ");
            printf( "\nUpdate:(Please   enter   3) ");
            printf( "\nDelete:(Please   enter   4) ");
            printf( "\nCount   :(Please   enter   5) ");
            printf( "\nOrder   :(Please   enter   6) ");
            printf( "\nOutput:(Please   enter   7) ");
            printf( "\nQuit     :(Please   enter   0) ");
            printf( "\nPlease   Choose: ");
            scanf( "%d ",&n);
            if((n> =0)&&(n <=5))
            {     switch(n)
  {   /*   case   1:   ListAdd();             break;         添加   */
                        case   2:   ListSearch();       break;       /*   查找   */
                        case   3:   ListModify();       break;       /*   修改   */


                        case   4:   ListDelete();       break;       /*   删除   */
                        case   5:   ListPrint();         break;       /*   输出   */
        case   0:   exit(0);
                  }
  printf( "\n\nFinish!Please   chose   again... ");
            }
            else
  printf( "\n\nFalse!Please   chose   again... ");
      }
}


/*--------------------------------创建学生资料----------------------------------*/
void   ListCreate()
{     struct   student   stu;
      char   ch;
      printf( "\nPlease   enter   the   name   of   the   students   information   system: ");
      scanf( "%s ",filename);
      if((fp=fopen(filename, "w "))==NULL)
      {     printf( "\nSorry,you   couldn 't   create   the   students   information   system! ");
            exit(0);
      }
      fprintf(fp, "%-15s%-15s%-10s%-20s%-50s\n ", "NUM ", "NAME ", "SEX ", "TEL ", "ADDR ");
      printf( "\nPlease   enter   number,name,sex,telephone   and   address(Enter   0   in   the   end)\n ");

      scanf( "%s ",stu.num);
      getchar();
      while(ch!= '0 ')
      {     scanf( "%s ",stu.name);
            getchar();

            scanf( "%s ",stu.sex);
            getchar();

            scanf( "%s ",stu.tel);
            getchar();

            scanf( "%s ",stu.addr);
            getchar();


            fprintf(fp, "%-15s%-15s%-10s%-20s%-50s%\n ",stu.num,stu.name,stu.sex,stu.tel,stu.addr);
            ch=getchar();
            if(ch!= '0 ')
            {     scanf( "%s ",stu.num);
  getchar();
            }
      }
      fclose(fp);
}


/*-------------------------------显示输出学生资料-------------------------------*/
void   ListPrint()
{     struct   student   stu;
      if((fp=fopen(filename, "r "))==NULL)
      {     printf( "\nSorry,you   can 't   open   the   students   information   system! ");
            exit(0);
      }
      printf( "\n\n%40s\n\n ", "The   Students   Information   System ");


      while(!feof(fp))
      {
            fscanf(fp, "%s ",stu.num);
            fscanf(fp, "%s ",stu.name);
            fscanf(fp, "%s ",stu.sex);
            fscanf(fp, "%s ",stu.tel);
            fscanf(fp, "%s ",stu.addr);
            printf( "%-15s%-15s%-10s%-20s%-50s\n ",stu.num,stu.name,stu.sex,stu.tel,stu.addr);

      }
      fclose(fp);
}

[解决办法]
一般源数据都是用文件读入,好判断一点.呵呵,我也不知道怎么输入才是最好!
不过我看问题会不会出在这里啊,我的猜测,因为我以前也犯过这个错误:scanf只能读入连续的字符串,到回车或者空格结束.这里你用scanf进行字符串读入恐怕会有问题,你能确保那些名字,地址字符串中间都没有空格?

热点排行