我第八个功能,过期商品查询,可以运行,但是结果有问题,请帮我改一下。



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct xinxi
{
    int id;
    char name[10];
    char produce[10];
    float price;
    int number;    
}; struct Product {
    char mingzi[50];
    char production_date[11]; // 格式为 yyyy-mm-dd
};

int compare_dates(char date1[], char date2[]) {
    // 比较两个日期的大小,如果 date1 > date2,返回 1;如果 date1 == date2,返回 0;如果 date1 < date2,返回 -1。
    int year1, month1, day1, year2, month2, day2;
    scanf(date1, "%d-%d-%d", &year1, &month1, &day1);
    scanf(date2, "%d-%d-%d", &year2, &month2, &day2);
    if (year1 > year2) {
        return 1;
    }
    else if (year1 < year2) {
        return -1;
    }
    else {
        if (month1 > month2) {
            return 1;
        }
        else if (month1 < month2) {
            return -1;
        }
        else {
            if (day1 > day2) {
                return 1;
            }
            else if (day1 < day2) {
                return -1;
            }
            else {
                return 0;
            }
        }
    }
}
void LOOK() {
    int num_products;
    printf("请输入超市系统中已经录入的商品数量:");
    scanf("%d", &num_products);

    struct Product products[10000];
    for (int i = 0; i < num_products; i++) {
        printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
        scanf("%s %s", products[i].mingzi, products[i].production_date);
    }

    char input_date[11];
    printf("请输入当前日期(格式为 yyyy-mm-dd):");
    scanf("%s", input_date);

    printf("以下商品已经过期:\n");
    for (int i = 0; i < num_products; i++) {
        if (compare_dates(products[i].production_date, input_date) < 0) {
            printf("%s\n", products[i].mingzi);
        }
    }


}


void Endprogram()
{
    char choice;
    system("cls");
    
    printf("\n\n\n\n\n\n\n\t\t\t您确定要退出系统吗?\n\n\n\t\t\t如果您想退出请按'y',其它键将返回主菜单.....");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        system("cls");
        printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢您的使用!!!");
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        exit(0);
    }
    else
    {
        system("cls");
    }

}
void ruku(struct xinxi a[])  //只是输入还需要创建一个文档保留,若不保留则程序结束就不在了 
{
    struct xinxi b[100];
    FILE *fp;
    int k=0,t,i=0,j,m=0;
    printf("   输入您要入库物品:请按1       ");
    printf("\n") ;
    scanf("%d",&j);
    printf("\n");
    printf("   请按照以下格式输入:物品编号 物品名称 物品产地 物品价格 物品数量\n");
    printf("                   例:1 奶粉 湖南 49.9 100\n\n"); 
/*    for(i=0;i<j;i++)
    {
    scanf("%d%s%*c%s%*c%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number); 
    }*/
    fp=fopen("C:\\store.txt","r");
    while(!feof(fp))
    {
    fread(&b[k],sizeof(struct xinxi),1,fp);
    k++;
    }
    fclose(fp);
    
    
    fp=fopen("C:\\store.txt","a");
    for(i=0;i<j;i++)
    {
    scanf("%d%s%*c%s%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
    for(t=0;t<k;t++)
    {
        if(a[i].id==b[t].id)
        {
            printf("物品编号:%d在数据库中已存在,请重新输入",a[i].id);
            m=2;
        }
    }
    //printf("\nm=%d",m);    
    if(m==0)
    {
        fwrite(&a[i],sizeof(struct xinxi),1,fp);
        printf("\n入库成功");
        printf("\n");
        
    
    }
    }     
    getchar();
    fclose(fp);
    
    
    
}

void liulan(struct xinxi a[])//修改后会出现神秘字符 
{
    int j=1;//j=0会多输入一行 
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    while(!feof(fp))
    {
    fread(&a[j],sizeof(struct xinxi),1,fp);
    if(a[j].id!=0)
    //for(j=0;j<i-1;j++)
    {
    printf("%d %s %s %.2f %d\n",a[j].id,a[j].name,a[j].produce,a[j].price,a[j].number);
    printf("\n");
    }
    j++;
    }
}
void chaxun(struct xinxi a[])
{
    int i=0,k,flag=0,n;
    char b[100];
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要查询商品的商品名称:");
    scanf("%s",b);
    printf("\n");
    printf("                    物品编号 名称 产地 价格 数量\n");
    while(!feof(fp))
  { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                    %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
  }
    fclose(fp);
}
void xiugai (struct xinxi a[])
{

    int i=0,k,flag=0,n;
    char b[100];
    char panduan='Y'; 
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要修改信息的商品名称:");
    scanf("%s",b);
    printf("\n");
    system("cls");
    printf("                    物品编号 物品名称 物品产地 物品价格 物品数量\n");
    while(!feof(fp))
    { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                    %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
   }
   /*printf("\n%d",i);
   printf("\n");*/
    fp=fopen("C:\\store.txt","w");
    printf("\n"); 
   
   if(flag==1)
    {
   
   
   do{
       switch(panduan)
   {case'Y':   
    printf("\n                    1.修改物品编号\n");
    printf("                    2.修改物品名称\n");
    printf("                    3.修改物品产地\n");
    printf("                    4.修改物品价格\n");
    printf("                    5.修改物品数量\n");
    printf("                    请选择要修改的信息:"); 
    scanf("%d",&k);
    if(k==1)
    {
    printf("\n                    请选择修改后的物品编号:"); 
    scanf("%d",&a[n].id);
    }
     if(k==2)
    {
    printf("\n                    请选择修改后的物品名称:"); 
    scanf("%s",a[n].name);
    }
     if(k==3)
    {
    printf("\n                    请选择修改后的物品产地:"); 
    scanf("%s",a[n].produce);
    }
    else if(k==4)
    {
    printf("\n                    请选择修改后的物品价格:"); 
    scanf("%f",&a[n].price);
    }
    else if(k==5)
    {
    printf("\n                    请选择修改后的物品数量:"); 
    scanf("%d",&a[n].number);
    }


    fp=fopen("C:\\store.txt","w");
    for(k=0;k<i-1;k++)
    {
    fwrite(&a[k],sizeof(struct xinxi),1,fp);
    }
    fclose(fp); 
    printf("                    是否继续修改,是:Y,否:N");
    
    }
    printf("\n");
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 
    printf("                    ");
    scanf("%c",&panduan);
    }
    while(panduan!='N');
    
   }//if的后括号 
   
   
    if(flag==0)
    {
    printf("                    查无此商品"); 
    }
    printf("\n");
    
}


void shanchu(struct xinxi a[])
{
    int i=0,k,flag=0,n;
    char b[100];
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要删除商品的商品名称:");
    scanf("%s",b);
    printf("\n");
    system("cls");
    printf("                    物品编号 物品名称 物品产地 物品价格 物品数量\n");
    while(!feof(fp))
  { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                   %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
  }
   
    fp=fopen("C:\\store.txt","w");
    for(k=0;k<i-1;k++)
    {
        if(k!=n)
        {
        fwrite(&a[k],sizeof(struct xinxi),1,fp);    
        }    
    }
    fclose(fp);    
    printf("\n                                                删除成功\n\n"); 
    
    
    
}


main()
{
     struct xinxi a[100];
    int m,i=0;
    

        while(m!=7)
    {
    
    printf("                    欢迎使用超市管理系统\n");
    printf("     1.新购物品入库                 ");
    printf("     2.物品信息删除\n");
    printf("     3.物品信息修改                 ");
    printf("     4.物品信息查询\n");
    printf("     5.物品信息浏览                 ");
    printf("     8.过期商品查询\n");
    printf("     7.退出\n");
    printf("\n\n");
    
    
    

    
    printf("                    请输入你想要操作的编号:");
    scanf("%d",&m);
    printf("\n");
    if(m==1)
    {
        ruku(a);
    }
    else if(m==5)
    {
        liulan(a);
    }
    else if(m==3)
    {
        xiugai(a);
     } 
    else if(m==4)
    {
        chaxun(a);
    }
    else if(m==2)
    {
        shanchu(a);
    }
    else if(m==8)
    {
        LOOK();
    }
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 

    }
    

    printf("                    感谢使用,祝你天天开心"); 
    
    
    return 0; 
}

TechWhizKid参考GPT回答:
已修改

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

struct xinxi
{
    int id;
    char name[10];
    char produce[10];
    float price;
    int number;    
}; 

struct Product {
    char mingzi[50];
    char production_date[11]; // 格式为 yyyy-mm-dd
};

int compare_dates(char date1[], char date2[]) {
    int year1, month1, day1, year2, month2, day2;
    sscanf(date1, "%d-%d-%d", &year1, &month1, &day1);
    sscanf(date2, "%d-%d-%d", &year2, &month2, &day2);
    if (year1 > year2) {
        return 1;
    }
    else if (year1 < year2) {
        return -1;
    }
    else {
        if (month1 > month2) {
            return 1;
        }
        else if (month1 < month2) {
            return -1;
        }
        else {
            if (day1 > day2) {
                return 1;
            }
            else if (day1 < day2) {
                return -1;
            }
            else {
                return 0;
            }
        }
    }
}
void LOOK() {
    int num_products;
    printf("请输入超市系统中已经录入的商品数量:");
    scanf("%d", &num_products);

    struct Product products[10000];
    for (int i = 0; i < num_products; i++) {
        printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
        scanf("%s %s", products[i].mingzi, products[i].production_date);
    }

    char input_date[11];
    printf("请输入当前日期(格式为 yyyy-mm-dd):");
    scanf("%s", input_date);

    printf("以下商品已经过期:\n");
    for (int i = 0; i < num_products; i++) {
        if (compare_dates(products[i].production_date, input_date) < 0) {
            printf("%s\n", products[i].mingzi);
        }
    }
}
 
 
void Endprogram()
{
    char choice;
    system("cls");
    
    printf("\n\n\n\n\n\n\n\t\t\t您确定要退出系统吗?\n\n\n\t\t\t如果您想退出请按'y',其它键将返回主菜单.....");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        system("cls");
        printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢您的使用!!!");
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
        exit(0);
    }
    else
    {
        system("cls");
    }
 
}
void ruku(struct xinxi a[])  //只是输入还需要创建一个文档保留,若不保留则程序结束就不在了 
{
    struct xinxi b[100];
    FILE *fp;
    int k=0,t,i=0,j,m=0;
    printf("   输入您要入库物品:请按1       ");
    printf("\n") ;
    scanf("%d",&j);
    printf("\n");
    printf("   请按照以下格式输入:物品编号 物品名称 物品产地 物品价格 物品数量\n");
    printf("                   例:1 奶粉 湖南 49.9 100\n\n"); 
/*    for(i=0;i<j;i++)
    {
    scanf("%d%s%*c%s%*c%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number); 
    }*/
    fp=fopen("C:\\store.txt","r");
    while(!feof(fp))
    {
    fread(&b[k],sizeof(struct xinxi),1,fp);
    k++;
    }
    fclose(fp);
    
    
    fp=fopen("C:\\store.txt","a");
    for(i=0;i<j;i++)
    {
    scanf("%d%s%*c%s%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
    for(t=0;t<k;t++)
    {
        if(a[i].id==b[t].id)
        {
            printf("物品编号:%d在数据库中已存在,请重新输入",a[i].id);
            m=2;
        }
    }
    //printf("\nm=%d",m);    
    if(m==0)
    {
        fwrite(&a[i],sizeof(struct xinxi),1,fp);
        printf("\n入库成功");
        printf("\n");
        
    
    }
    }     
    getchar();
    fclose(fp);
    
    
    
}
 
void liulan(struct xinxi a[])//修改后会出现神秘字符 
{
    int j=1;//j=0会多输入一行 
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    while(!feof(fp))
    {
    fread(&a[j],sizeof(struct xinxi),1,fp);
    if(a[j].id!=0)
    //for(j=0;j<i-1;j++)
    {
    printf("%d %s %s %.2f %d\n",a[j].id,a[j].name,a[j].produce,a[j].price,a[j].number);
    printf("\n");
    }
    j++;
    }
}
void chaxun(struct xinxi a[])
{
    int i=0,k,flag=0,n;
    char b[100];
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要查询商品的商品名称:");
    scanf("%s",b);
    printf("\n");
    printf("                    物品编号 名称 产地 价格 数量\n");
    while(!feof(fp))
  { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                    %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
  }
    fclose(fp);
}
void xiugai (struct xinxi a[])
{
 
    int i=0,k,flag=0,n;
    char b[100];
    char panduan='Y'; 
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要修改信息的商品名称:");
    scanf("%s",b);
    printf("\n");
    system("cls");
    printf("                    物品编号 物品名称 物品产地 物品价格 物品数量\n");
    while(!feof(fp))
    { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                    %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
   }
   /*printf("\n%d",i);
   printf("\n");*/
    fp=fopen("C:\\store.txt","w");
    printf("\n"); 
   
   if(flag==1)
    {
   
   
   do{
       switch(panduan)
   {case'Y':   
    printf("\n                    1.修改物品编号\n");
    printf("                    2.修改物品名称\n");
    printf("                    3.修改物品产地\n");
    printf("                    4.修改物品价格\n");
    printf("                    5.修改物品数量\n");
    printf("                    请选择要修改的信息:"); 
    scanf("%d",&k);
    if(k==1)
    {
    printf("\n                    请选择修改后的物品编号:"); 
    scanf("%d",&a[n].id);
    }
     if(k==2)
    {
    printf("\n                    请选择修改后的物品名称:"); 
    scanf("%s",a[n].name);
    }
     if(k==3)
    {
    printf("\n                    请选择修改后的物品产地:"); 
    scanf("%s",a[n].produce);
    }
    else if(k==4)
    {
    printf("\n                    请选择修改后的物品价格:"); 
    scanf("%f",&a[n].price);
    }
    else if(k==5)
    {
    printf("\n                    请选择修改后的物品数量:"); 
    scanf("%d",&a[n].number);
    }
 
 
    fp=fopen("C:\\store.txt","w");
    for(k=0;k<i-1;k++)
    {
    fwrite(&a[k],sizeof(struct xinxi),1,fp);
    }
    fclose(fp); 
    printf("                    是否继续修改,是:Y,否:N");
    
    }
    printf("\n");
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 
    printf("                    ");
    scanf("%c",&panduan);
    }
    while(panduan!='N');
    
   }//if的后括号 
   
   
    if(flag==0)
    {
    printf("                    查无此商品"); 
    }
    printf("\n");
    
}
 
 
void shanchu(struct xinxi a[])
{
    int i=0,k,flag=0,n;
    char b[100];
    FILE *fp;
    fp=fopen("C:\\store.txt","r");
    printf("                    请输入要删除商品的商品名称:");
    scanf("%s",b);
    printf("\n");
    system("cls");
    printf("                    物品编号 物品名称 物品产地 物品价格 物品数量\n");
    while(!feof(fp))
  { 
    fread(&a[i],sizeof(struct xinxi),1,fp);
    //fread(&b[i],sizeof(struct zhigong),1,fp);
    if(strcmp(a[i].name,b)==0)
    {
    printf("                   %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
    flag=1;
    n=i;
    }
    i++;
  }
   
    fp=fopen("C:\\store.txt","w");
    for(k=0;k<i-1;k++)
    {
        if(k!=n)
        {
        fwrite(&a[k],sizeof(struct xinxi),1,fp);    
        }    
    }
    fclose(fp);    
    printf("\n                                                删除成功\n\n"); 
    
    
    
}
 
 
int main() {
{
     struct xinxi a[100];
    int m,i=0;
    
 
        while(m!=7)
    {
    
    printf("                    欢迎使用超市管理系统\n");
    printf("     1.新购物品入库                 ");
    printf("     2.物品信息删除\n");
    printf("     3.物品信息修改                 ");
    printf("     4.物品信息查询\n");
    printf("     5.物品信息浏览                 ");
    printf("     8.过期商品查询\n");
    printf("     7.退出\n");
    printf("\n\n");
    
    
    
 
    
    printf("                    请输入你想要操作的编号:");
    scanf("%d",&m);
    printf("\n");
    if(m==1)
    {
        ruku(a);
    }
    else if(m==5)
    {
        liulan(a);
    }
    else if(m==3)
    {
        xiugai(a);
     } 
    else if(m==4)
    {
        chaxun(a);
    }
    else if(m==2)
    {
        shanchu(a);
    }
    else if(m==8)
    {
        LOOK();
    }
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 
    printf("------------------------------------------------------------------------------------------------------------------------");
    printf("\n"); 
 
    }
    
 
    printf("                    感谢使用,祝你天天开心"); 
    
    
    return 0; 

}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

LOOK函数输入 %s之前 和 之后 都 用 getchar() 接收一下换行符

void LOOK() {
    int num_products;
    printf("请输入超市系统中已经录入的商品数量:");
    scanf("%d", &num_products);
    getchar(); // 接收一下换行符
    struct Product products[10000];
    for (int i = 0; i < num_products; i++) {
        printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
        scanf("%s %s", products[i].mingzi, products[i].production_date);
        getchar(); // 接收一下换行符
    }
 
    char input_date[11];
    printf("请输入当前日期(格式为 yyyy-mm-dd):");
    scanf("%s", input_date);
    printf("以下商品已经过期:\n");
    for (int i = 0; i < num_products; i++) {
        if (compare_dates(products[i].production_date, input_date) < 0) {
            printf("%s\n", products[i].mingzi);
        }
    }