问题描述
我正在尝试创建一个程序,在它读取的日期之后打印第二天。 我不明白为什么当程序在终端上运行时,它会在显示“日期为 %d/%d/%d\n”时结束,并且 if 链没有在程序中启动。 我试图在每个 if 之后插入一个 printf 以查看它是否有效,但是由于它之前停止过,我也无法查看是否存在一些逻辑或语法问题,并且我无法进行调试。 所以如果在第一个 if 之后我们会出现一些逻辑错误,我很抱歉,但我在终端上看不到它! 谁能解释一下为什么我有这个问题? 提前致谢!
#include <stdio.h>
int main (void) {
int d,m,y,days;
double leap;
printf("Insert day: \n");
scanf("%d",&d);
printf("Insert month: \n");
scanf("%d",&m);
printf("Insert year: \n");
scanf("%d",&y);
printf("Date is %d/%d/%d\n",d,y);
if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10) {
days==31;
if (d<days) {
d=d+1;
printf("The next day is %d/%d/%d!\n",y);
}
else if (d==days) {
d==1;
m=m+1;
printf("The next day is %d/%d/%d!\n",y);
}
}
else if (m==12) {
days==31;
if (d<days) {
d=d+1;
printf("The next day is %d/%d/%d!\n",y);
}
else if (d==days) {
d==1;
m==1;
y=y+1;
printf("The next day is %d/%d/%d!\n",y);
}
}
else if (m==4 || m==6 || m==9 || m==11) {
days==30;
if (d<days) {
d=d+1;
printf("The next day is %d/%d/%d!\n",y);
}
else if (d==days) {
m=m+1;
printf("The next day is %d/%d/%d!\n",y);
}
}
else if (m==2) {
leap=(y)%(4);
if (leap==0) {
days==29;
if (d==days) {
d==1;
m=m+1;
printf("The next day is %d/%d/%d!\n",y);
}
else if (d<days) {
d=d+1;
printf("The next day is %d/%d/%d!\n",y);
}
else {
days==28;
if (d==days) {
d==1;
m=m+1;
printf("The next day is %d/%d/%d!\n",y);
}
else if (d==days) {
d=d+1;
printf("The next day is %d/%d/%d!\n",y);
}
}
}
}
else if (m>12) {
printf ("The date doesn't exist!\n");
}
}
解决方法
在 C 中,运算符 ==
用于比较,而不是赋值。因此,将预期分配中的 ==
更改为 =
。
当您编译 C 程序时,您应该始终启用警告并仔细阅读它们。例如,使用 GCC 编译器和选项 -Wall
您将看到类似
warning: statement with no effect [-Wunused-value]
days == 30;