aHu454
2021-07-13 13:18
采纳率: 100%
浏览 35

C语言scanf输入时缓冲区问题

C语言scanf输入时缓冲区问题 ,运行直接弹出程序

img

img

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


FILE *fp;
int m;
struct info
{
    int bh;//编号
    char sm[30];//书名
    int jg;//价格
    char cbs[30];//出版社
    char cbrq[30];//出版日期
    int kc;//库存
}
em[100];
int vis[100]={0};
void load();


void in()//导入
{
    int i ;

    if((fp=fopen("in.txt","r"))==NULL)
        return;

    for(i=1;i<=10;i++)
    {
        fscanf(fp,"%d%s%d%s%s%d",&em[i].bh, em[i].sm,&em[i].jg,em[i].cbrq,em[i].cbs,&em[i].kc);
        vis[i]=1;
    }

    m=10;

    fclose(fp);    
}

void out()
{
    int i;
    if((fp=fopen("out.txt","w"))==NULL)
        return;
    for(i=1;i<=m;i++)
    {
        if(vis[i])
        {
           fprintf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
        }
    }
    fclose(fp);
}



void memu1()//样式1
{
    system("cls");
    printf("\n");
    printf("\n");
    printf("              )))))))))))))))))进入图书管理系统((((((((((((((((\n"); 
    printf("              )           1.图书信息录入   5.浏览图书信息         (\n");              
    printf("              )           2.图书信息修改   6.  借阅图书           (\n");
    printf("              )           3.图书信息删除   7.  归还图书           (\n"); 
    printf("              )           4.图书信息查询   8.    清屏             (\n");
    printf("              )           0.    退出                              (\n"); 
    printf("              )))))))))))))))))))))))))))))))((((((((((((((((((((((\n");
}


void memu2()//样式2
{
    system("cls");
    printf("\n");
    printf("\n");
    printf("*一一一一一一一一一一一一一一-一一一一一一一一一一一一一*\n");
    printf("丨                                                     丨\n");
    printf("丨               *一一一一一一一一一一一*              丨\n");
    printf("丨               丨进入图书管理系统丨              丨\n");
    printf("丨               *一一一一一一一一一一一*              丨\n");
    printf("丨                                                     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨     丨1.图书信息录入丨       丨2.图书信息修改丨     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨                                                     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨     丨3.图书信息删除丨       丨4.图书信息查询丨     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨                                                     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨     丨5.浏览图书信息丨       丨6.  借阅图书  丨     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨                                                     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨     丨7.  归还图书  丨       丨    8.清屏    丨     丨\n");
    printf("丨     *一一一一一一一一*       *一一一一一一一一*     丨\n");
    printf("丨                                                     丨\n");
    printf("丨     *一一一一一一一一*                              丨\n");
    printf("丨     丨    0.退出    丨                              丨\n");
    printf("丨     *一一一一一一一一*                              丨\n");
    printf("丨                                                     丨\n");
    printf("*一一一一一一一一一一一一一-一一一一一一一一一一一一一一*\n");


}






void add() //录入
{
    int n,i;
    for(i=1;i<100;i++)
      if(vis[i]!=1)
      { 
          n=i;
          break;
      }
    printf("新图书编号为:%d\n",n);
    em[n].bh=n;
    printf("请输入新图书书名:"); 
    scanf(" %8s",em[n].sm);
    printf("请输入新图书价格:"); 
    scanf(" %8d",&em[n].jg);
    printf("请输入新图书出版社:"); 
    scanf(" %8s",em[n].cbs);
    printf("请输入新图书出版日期:"); 
    scanf(" %8s",em[n].cbrq);
    printf("请输入新图书库存:"); 
    scanf(" %8d",em[n].kc);    
    vis[n]=1;
    m++;
    out();
    
}







void modify()//修改
{    
    int n;
    printf("请输入的待修改的图书编号:");    
    scanf("%d",&n);
    if(vis[n])
    {
        em[n].bh=n;
        printf("请输入修改后的图书书名:"); 
        scanf("%s",em[n].sm);
        printf("请输入修改后的图书价格:"); 
        scanf("%d",&em[n].jg);
        printf("请输入修改后的图书出版社:"); 
        scanf("%s",em[n].cbs);
        printf("请输入修改后的图书出版日期:"); 
        scanf("%s",em[n].cbrq);
        printf("请输入修改后的图书库存:"); 
        scanf("%s",em[n].kc);    
        out();
    }
    else
        printf("未找到符合要求的记录\n");
}



void del()//删除
{    
    int n;
    printf("请输入的待删除的图书编号:");
    scanf("%d",&n);
    if(vis[n])
    {
        vis[n]=0;
        printf("记录删除成功!!\n");
        system("pause");
    }
    else
        printf("未找到符合要求的记录\n");
        out();

}



void bybh()  //按编号查询
{
    int n;
    printf("请输入所需查询的图书编号:");
    scanf("%d",&n);
    if(vis[n])
    {
          printf("编号   书名     价格     出版日期      出版社      库存\n");    
        printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[n].bh,em[n].sm,em[n].jg,em[n].cbrq,em[n].cbs,em[n].kc);
    }
    else
        printf("未找到符合要求的记录\n");
    
}


void bysm() //按书名查询
{    
    char ch[10];
    int s=0;
    int i;

    printf("请输入所需查询的图书书名:");
    scanf("%s",ch);
    for( i=1;i<=m;i++)
    {
        if(strcmp(ch,em[i].sm)==0)
        {    
            s=1;
            printf("编号   书名     价格     出版日期      出版社      库存\n");    
            printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
        }
    }
    if(s==0)
        printf("未找到符合要求的记录\n");
    
}


void byjg() //按价格查询
{

    char c;
    int n,i;
    int s=0;
    printf("请输入查询的价格段:");
    
    scanf("%c%d",&c,&n);
   
    if(c=='>')
    {
        for(i=1;i<=m;i++)
        {
            if(em[i].jg>n)
            {
                s=1;
                printf("编号   书名     价格     出版日期      出版社      库存\n");    
                printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
            }
        }
            if(s==0)
        printf("未找到符合您的要求的记录\n");
    }
    else if(c=='<')
    {
        for(i=1;i<=m;i++)
        {
            if(em[i].jg<n)
            {
                s=1;
                printf("编号   书名     价格     出版日期      出版社      库存\n");    
                printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
            }
        }
            if(s==0)
        printf("未找到符合您的要求的记录\n");
    }
    else if(c=='=')
    {
        for(i=1;i<=m;i++)
        {
            if(em[i].jg==n)
            {
                s=1;
                printf("编号   书名     价格     出版日期      出版社      库存\n");    
                printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
            }
        }
            if(s==0)
        printf("未找到符合您的要求的记录\n");
    }

}




void bycbs()//按出版社查询
{    
    char ch[10];
    int s=0;
    int i;
    
//    if((fp=fopen("out,text","r"))==NULL)
    //    return;

    printf("请输入所需查询的图书出版社:");

    scanf("%s",ch);

       for( i=1;i<=m;i++)
       {
            if(strcmp(ch,em[i].cbs)==0)
            {    
               s=1;
               printf("编号   书名     价格     出版日期      出版社      库存\n");    
               printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
            }
       }
            if(s==0)
        printf("未找到符合要求的记录\n");
        //fclose(fp);
}


void bycbrq()//按出版日期查询
{  
    char ch[10];
    int s=0;
    int i; 
    
    //if((fp=fopen("out,text","r"))==NULL)
    //    return;
    
    printf("请输入所需查询的图书出版日期:");

    scanf("%s",ch);
      
    for(i=1;i<=m;i++)
       {
            if(strcmp(ch,em[i].cbrq)==0)
            {    
               s=1;
               printf("编号   书名     价格     出版日期      出版社      库存\n");    
               printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
            }
       }
            if(s==0)
        printf("未找到符合要求的记录\n");
       // fclose(fp);
}




void bykc() //按库存查询
{
    int i;
    int k;
    int s=0;
    printf("请输入所需查询的库存数量:");
    scanf("%d",&k);
    for(i=1;i<=m;i++)
    {
        if(k==em[i].kc)
        {    
            s=1;
            printf("编号   书名     价格     出版日期      出版社      库存\n");    
            printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
        }
    }
    if(s==0)
        printf("未找到符合您的要求的记录\n");

}





void serch()//查询
{int t;
    system("cls");
    printf("                 ###########请选择查询方式##########\n"); 
    printf("                     1.通过编号     5.通过出版日期\n");  
    printf("                     2.通过书名     6.通过库存\n");
    printf("                     3.通过价格     7.清屏\n"); 
    printf("                     4.通过出版社   0.返回上一级\n"); 
    printf("             ##############################################\n");

    while(1)
    {
        printf("请输入您的选择:");
        scanf("%d",&t);
       if (t==1)
          bybh();
       else if (t==2)
          bysm();
       else if (t==3)
          byjg();
       else if (t==4)
          bycbs();
       else if (t==5)
          bycbrq();
       else if (t==6)
          bykc();
       else if (t==7)
       { system("cls");

           printf("                 ###########请选择查询方式##########\n"); 
        printf("                     1.通过编号     5.通过出版日期\n");  
        printf("                     2.通过书名     6.通过库存\n");
         printf("                     3.通过价格     7.清屏\n"); 
        printf("                     4.通过出版社   0.返回上一级\n"); 
        printf("             ##############################################\n");
       }
        
        else if (t==0)
          break;
       else 
           printf("指令错误!!\n");

    }
}




void list()//浏览
{
    int n;
    int    i;
    int t;
    printf("请输入每页显示记录数量:");
    scanf("%d",&n);
    t=0;
    for(i=1;i<=m;i++)
    {        
        if(t==0)
        {
            system("cls");
            printf("编号   书名     价格     出版日期      出版社      库存\n");    
        }    
        if(vis[i]==1)
        if(t<n)
        {  
           t++;
           printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
           if(t==n)
           {
                t=0;
                system("pause");
            }
        }
    }
}


void jieyue()//借阅图书 
{
    int n;
    int i;
    printf("请选择你的图书编号:");
    scanf("%d",&n);
    if(vis[n])
    {
        printf("编号   书名     价格     出版日期      出版社      库存\n");    
        printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[n].bh,em[n].sm,em[n].jg,em[n].cbrq,em[n].cbs,em[n].kc);
        printf("请输入借阅的数量:");
        scanf("%d",&i);
        em[n].kc=em[n].kc-i;
    printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[n].bh,em[n].sm,em[n].jg,em[n].cbrq,em[n].cbs,em[n].kc);
        system("pause");
       
    }
    else    printf("未找到符合您的要求的记录\n");
    
    out();
}


void guihuan()//归还图书
{
    int n;
    int i;
    printf("请选择你的图书编号:");
    scanf("%d",&n);
    if(vis[n])
    {
        printf("编号   书名     价格     出版日期      出版社      库存\n");    
        printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[n].bh,em[n].sm,em[n].jg,em[n].cbrq,em[n].cbs,em[n].kc);
        printf("请输入归还的数量:");
        scanf("%d",&i);
        em[n].kc=em[n].kc+i;
        printf("%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[n].bh,em[n].sm,em[n].jg,em[n].cbrq,em[n].cbs,em[n].kc);
        system("pause");
    }
    else
      printf("未找到符合您的要求的记录\n");
    out();
}
             








int main()
{int t,x;
    in();//初始化
   out();
     printf("请选择菜单样式:1.简约 2.经典\n");
     scanf("%d",&x);    
    while(1)
    {
    
     if(x==1)
        memu1();
     else
        memu2();

        
        printf("请输入您的选择:");
        scanf("%d",&t); 
          if(t==1)
            add();
        if(t==2)
            modify();
        if(t==3)
            del();
        if(t==4)
            serch();
        if(t==5)
            list();
        if(t==6)//清屏
            system("cls");
        if(t==0)//退出
        {
            printf("您已退出图书馆信息管理系统!!\n");
            break;
        }

    }

   return 0;
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • qfl_sdu 2021-07-13 13:52
    已采纳

    第50行,fprintf()的第一个参数应该是fp:

    fprintf(fp,"%-3d   %-6s   %-7d %-8s %-8s    %-8d\n",em[i].bh,em[i].sm,em[i].jg,em[i].cbrq,em[i].cbs,em[i].kc);
    
    
    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • aHu454 2021-07-13 13:34

    img

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题