怎么能将我的结构体形式的生产日期和保质期相加,我编译的时候显示不能直接相加


struct Product {
  char mingzi[50];
  char production_date[11]; 
  char production_baozhiqi[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;
  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[num_products];
  for (int i = 0; i < num_products; i++) {
    printf("请输入第 %d 个商品的名称,生产日期和保质期(格式为 yyyy-mm-dd):", i+1);
    scanf("%s %s %s", products[i].mingzi, products[i].production_date,products[i].production_baozhiqi);
  }
 
  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+products[i].production_baozhiqi, input_date) < 0) {
      printf("%s\n", products[i].mingzi);
    }
  }
 
 
}

怎么能将我的结构体形式的生产日期和保质期相加,我编译的时候显示不能直接相加

这种倒是不能相加 因为是C 语言,C++的话你可以写个操作符重载
但是c语言你可以写成

char* add_dates(char date1[], char date2[]) {
  static char result[11] = {0};

  int year1, month1, day1, year2, month2, day2;
  sscanf(date1, "%d-%d-%d", &year1, &month1, &day1);
  sscanf(date2, "%d-%d-%d", &year2, &month2, &day2);
  
  sprintf(result, "%d-%d-%d", year1+year2, month1+month2, day1+day2);
  return result;
}
// 调用时
printf("以下商品已经过期:\n");
  for (int i = 0; i < num_products; i++) {
    if (compare_dates(add_date(products[i].production_date, products[i].production_baozhiqi), input_date) < 0) {
      printf("%s\n", products[i].mingzi);
    }
  }

提供下全部的代码以及你的需求,可以给你修改下

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/193685
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:将一个数分解成多个加数相加的形式
  • 除此之外, 这篇博客: 老生常谈的大数加法中的 大数加法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 问题概述:
    两个极大的数进行加法求和
    思路:
    根据列竖式方式解决问题,一位一位的满十进一

    package algorithm;
    
    import java.util.Arrays;
    
    /**
     * 大数加法
     */
    public class BigNumAddition {
        public static void main(String[] args) {
            String num1 = "123";
            String num2 = "98";
            int[] numA = sub(num1);
            int[] numB = sub(num2);
            int[] add = add(numB, numA);
            print(add);
        }
        public static int[] sub(String num){
            int[] number = new int[num.length()];
            for (int i=0;i<num.length();i++){
                //低位在数组的前面,方便计算
                number[num.length()-1-i] = num.charAt(i)-48;
            }
            return number;
        }
        public static int[] add(int[] number1,int[] number2){
            int length = number1.length>number2.length?number1.length:number2.length;
            if (number1.length > number2.length){
                length = number1.length;
                //将短数组长度放大到与长数组一致,简化代码
                number2 = Arrays.copyOf(number2,length);
            }else{
                length = number2.length;
                number1 = Arrays.copyOf(number1,length);
            }
            int[] result = new int[length+1];
            for (int i=0;i<length;i++){
                    result[i] = result[i]+number1[i]+number2[i];
                    if(result[i]>=10){
                        result[i+1]++;
                        result[i] = result[i] - 10;
                    }
            }
            return result;
        }
        public static void print(int[] number){
            for (int i=number.length-1;i>=0;i--){
                //寻找最高有效位,因为加法结果数组长度比原数最长长度大1,所以只用判断最高位是否是0即可
                //若次高位进位 则最高有效位必不为0 若无进位次高位必不为0 故可以只判断最高位
                if (number[i] == 0 && i == number.length-1){
                    continue;
                }
                System.out.print(number[i]);
            }
        }
    }
    
    

    优化:
    这时候是一位一位的进行进位计算,但int型可以存储的数字远大于一位数的大小,我们可以根据这一点对代码进行优化,每9位数为一组,可以减少运算次数,提高效率

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 添加节点的实现小节, 巩固相关知识点

products[i].production_date+products[i].production_baozhiqi
->
strcat(products[i].production_date+products[i],production_baozhiqi)
BTW,你的代码似乎还有别的问题,感觉是GPT生成的?