C语言程序语句没有问题,运行后黑屏

img
如图所示,程序语句没有问题

img

运行之后黑屏,代码如下

int main(){
     int t=1,flag=1,f=1;
     char n;
     Node* p;
     Link Ku;
     while(t)
     {
         printf("n\n\n\n\n");
         printf("\n\t\t\t*******************************");
         printf("\n\t\t\t*       仓库管理系统          *");
         printf("\n\t\t\t*       1-存入货物            *");
         printf("\n\t\t\t*       2-取出货物            *"); 
         printf("\n\t\t\t*       3-显示所有货物信息    *"); 
         printf("\n\t\t\t*       4-查询货物数据        *"); 
         printf("\n\t\t\t*******************************");
         printf("\n\t\t\t 请选择功能(1-4):");
         f=1;
         while(f=1)
         {
             cin>>n;
             if(n<'1'||n>'4')
             {
                 printf("输入有误,请重新输入(1-4):");
                 f=1; 
             }
             else
             f=0;
         }
         printf("\n\n");
         switch(n)
         {
             case'1':
             {
                 printf("***********************************************\n");
                 printf("*                     存入货物                *\n");
                printf("***********************************************\n");
                printf("      货物编号  货物颜色  货物尺码  货物数量   \n");
                printf("***********************************************\n");
                int a=1;
                while(a=1)
                {
                    a=Ku.Insert();
                    Ku.Fprintf();
                 } 
                 break;
             }
            case'4':
            {
                     printf("*********************************************\n");
                     printf("**              查询货物信息               **\n");
                    printf("*********************************************\n");
                    flag=1;
                    char yn;
                    while(flag=1)
                    {
                        p=Ku.Search();
                        if(p)
                        {
                            printf("\n  货物编号  货物颜色  货物尺码  货物数量  \n");
                            printf("--------------------------------------------\n");
                            printf("%5s%9s%9s%8d\n",p->data.no,p->data.color,p->data.size,p->data.count);
                            printf("--------------------------------------------\n");
                        }
                        else
                            printf("仓库中没有该货物!\n");
                        printf("是否继续查询?(y/n)");
                        yn=Ku.Yn();
                        if(yn=='y'||yn=='Y')
                             flag=1;
                        if(yn=='n'||yn=='N')
                             flag=0;
                                 
                      } 
                    break;   
                 }
            case'2':
            {
                printf("************************************\n");
                printf("*             取出货物             *\n");
                printf("************************************\n");
                flag=1;
                char yn;
                while(flag==1)
                {
                    Ku.Delete();
                    printf("是否继续取货?(y/n):");
                    yn=Ku.Yn();
                    if(yn=='y'||yn=='Y')
                       flag=1;
                    if(yn=='n'||yn=='N')
                       flag=0;   
                 } 
                 break;
            }    
            case'3':
            {
                Ku.show();
                break;
             } 
         }
    }
    return 0;
  }
Link::Link()
{
    first=new Node;
    first->next=NULL;
    real=first;
    FILE *fp=NULL;
    fp=fopen("d:\\file01.txt","a");
    fclose(fp);
    //Fprintf();
    Fscanf();    
}
int Link::Insert()
{
    char yn;
    char no[10],color[10],size[10];
    int count,t;
    printf("\n    货物编号  货物颜色  货物尺码   货物数量   \n");
    printf("--------------------------------------\n");
    printf("\n 请输入货物编号:\n");
    strcpy(no,No());
    printf("\n 请输入货物颜色: \n");
    cin>>color;
    printf("\n 请输入货物尺码: \n");
    cin>>size;
    t=1;
    while(t)
    {
        printf("输入货物数量:");
        cin>>count;
        if(count<=0)
        {
            t=1;
            printf("货物数量必须大于0,请重新"); 
         }
         else
         t=0; 
    }
    p=first;real=first;
    p=p->next;
    while(p)
    {
        if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)==0)
        {
            //printf("仓库中已有该货物%d件\n",p->data.count);
            p->data.count=p->data.count+count;
            printf("添加成功!仓库中现有该货物%d件\n是否继续存货?(y/n):",p->data.count);
            yn=Yn();
            if(yn=='y'||yn=='Y') return 1;
            if(yn=='n'||yn=='N') return 0;            
        }
        if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)!=0)
        {
            printf("该货物尺码输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
            yn=Yn();
            if(yn=='y'||yn=='Y') return 1;
            if(yn=='n'||yn=='N') return 0;            
        }
        if(strcmp(p->data.no,no)==0&&strcmp(p->data.color,color)!=0&&strcmp(p->data.size,size)==0)
        {
            printf("该货物颜色输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
            yn=Yn();
            if(yn=='y'||yn=='Y') return 1;
            if(yn=='n'||yn=='N') return 0;            
        }
        if(strcmp(p->data.no,no)!=0&&strcmp(p->data.color,color)==0&&strcmp(p->data.size,size)==0)
        {
            printf("该货物编号输入有误,应为%s\n请重新输入(y),或取消存货(n):",p->data.size);
            yn=Yn();
            if(yn=='y'||yn=='Y') return 1;
            if(yn=='n'||yn=='N') return 0;            
        }
        real=p;
        p=p->next; 
    }
    if(p=NULL)
    {
        Node *s=new Node;
        strcpy(s->data.no,no);
        strcpy(s->data.color,color);
        strcpy(s->data.size,size);
        s->data.count=count;
        s->next=NULL;
        real->next=s;
        real=s;
        printf("添加成功!仓库中现在有该货物%d件\n是否继续存货?(y/n):",real->data.count);
            yn=Yn();
            if(yn=='y'||yn=='Y') return 1;
            if(yn=='n'||yn=='N') return 0;        
    }
    return 0; 
}    
Node *Link::Search()
{
    char abc;
    char no[10],size[10],color[10];
    int f;
    p=first;
    printf("========================\n");
    printf("    a.按货物编号查询    \n");
    printf("    b.按货物尺码查询    \n");
    printf("    c.按货物颜色查询    \n");
    printf("========================\n");
    printf("     请选择(a/b/c)     \n");
    f=1;
    while(f=1)
    {
        cin>>abc;
        if(abc=='a'||abc=='A'||abc=='b'||abc=='B'||abc=='c'||abc=='C')
        {
            f=0;
            if(abc=='a'||abc=='A')
            {
                printf("请输入查询货物编号:\n");
                strcpy(no,No());
                while(p&&strcmp(p->data.no,no)!=0)
                p=p->next;
            }
            if(abc=='b'||abc=='B')
            {
                printf("请输入查询货物尺码:\n");
                cin>>size;
                while(p&&strcmp(p->data.size,size)!=0)
                p=p->next;
            }
            if(abc=='c'||abc=='C')
            {
                printf("请输入查询货物颜色:\n");
                cin>>color;
                while(p&&strcmp(p->data.color,color)!=0)
                p=p->next;
            }                        
        }
        else
        {
            f=1;
            printf("输入有误,请重新输入(a/b/c)"); 
        } 
    }
    return p;
}
void Link::Delete()
{
    Node *q,*p;
    int count,t;
    char yn;
    p=Search();
    if(p=NULL)
    {
        printf("仓库中没有该货物!\n");
    }
    else
    {
        printf("\n 仓库中有该货物%d件。",p->data.count);
        int flag=1;
        while(flag=1)
        {
            printf("请输入要取出的货物数量:");
            t=1;
            while (t=1)
            {
                cin>>count;
                    if(count<0)
                    {
                        t=1;
                        printf("取货数量不可小于0,请重新输入取货数量:");                         
                    }
                    else
                        t=0;
                         
            }
            if(count>p->data.count)
            {
                printf("\n取货数量大于库存,是否要重新输入取货数量?(y/n):");
                yn=Yn();
                if(yn=='y'||yn=='Y') flag=1;
                if(yn=='n'||yn=='N') flag=0;
            }
            else
            {
                flag=0;
                if(count<p->data.count)
                {
                    p->data.count=p->data.count-count;
                    Fprintf();
                    printf("\n 取货成功,仓库中还有该货物%d件\n",p->data.count);
                    printf("\n 是否继续取货:(y/n)");
                    yn=Yn();
                    if(yn=='y'||yn=='Y') flag=1;
                    if(yn=='n'||yn=='N') flag=0; 
                }
                else
                {
                    q=first;
                    while(q!=NULL&&q->next!=p)
                         q=q->next;
                         q->next=p->next;
                         delete p;
                         Fprintf();
                         printf("取货成功!该货物已被全部取出!\n");
                }
            }    
        }
             
        }
    }
void Link::show()
{
    if(first->next=NULL)
       printf("仓库内没有货物!");
    else
    {
      printf("    货物编号  货物颜色  货物尺码   货物数量   \n");
      printf("----------------------------------------------\n");
      p=first->next;
      while(p)
          {
              printf("%15s%23s%23s%23d\n",p->data.no,p->data.color,p->data.size,p->data.count);
              p=p->next;
              printf("-----------------------------------------\n");
        }    
    }    
}
char Link::Yn()
{
    int f=1;
    char yn;
    while(f==1)
    {
        cin>>yn;
        if(yn=='y'||yn=='Y'||yn=='n'||yn=='N')
        {
            f=0;
            return yn;
        }
        else
        {
            printf("输入有误,请重新输入(y/n):");
            f=1;
        }
    }
}
char *Link::No()
{
    int t=1,i;
    static char *no=NULL,nol[10];
    
    while(t)
    {
        t=0;
        cin>>nol;
        no=nol;
        for(i=0;no[i];i++)
        {
            if(no[i]<'0'||no[i]>'z')
            {
                t=1;
                printf("货物编号只能使用a-z,A-Z和0-9的字符组成,请重新输入货物编号:");
                break;
            }
        }
    }
    return nol;
}    
void Link::Fprintf()
{
    FILE *fp=NULL;
    fp=fopen("d:\\file01.txt","w");
    p=first->next;
    while(p!=NULL)
    {
        fprintf(fp,"%10s%30s%30s%10d\n",p->data.no,p->data.color,p->data.size,p->data.count);
        p=p->next;
    }
    fclose(fp);
}
void Link::Fscanf()
{
    FILE *fp=NULL;
    p=first;
    Node *s;
    fp=fopen("d:\\file01.txt","r");
    if(fp=NULL)
    {
        cout<<"不能打开文件!"<<endl;
        exit(0);
    }
    while(feof(fp)==0)
    {
        s=new Node;
        fscanf(fp,"%s%s%s%d\n",p->data.no,p->data.color,p->data.size,p->data.count);
        if(s->data.count>0)
        {
            p->next=s;
            p=s;
        }
    }
    p->next=NULL;
    fclose(fp);
}

18行while(f=1)漏了一个等号,应该是while(f==1)
54 行178行都是这个问题,下面还有,你检查一下

while(f=1) 改为 while(f==1)
if(fp=NULL) 改为 if(fp==NULL)
作为判定条件,要用==,不是=