C程序正在打印太多
C program is printing to much
我正在尝试 运行 这个程序,它要求用户以 mm/dd/yy 格式输入两个日期。在输入两个日期后,程序应该比较两个日期以查看哪个日期较大。我 运行 遇到的问题是,当我在同一日期输入时,代码吐出 "The dates are the same." 但它继续打印 1/1/1 早于 1/1/1(假设1/1/1 是输入两次的日期)。当代码相同时,如何跳过下一个代码?我希望程序在输入相同日期后结束。
下面是我目前的代码。我也在使用 bool,但不确定我是否使用正确。
// Preprocessor directives
#include <stdio.h>
#include <stdbool.h>
// Call main function
int main (void)
{
// Declare variables
int d1, m1, y1, d2, m2, y2;
bool first_date = true;
// Prompt user to enter information
printf("Enter first date (mm/dd/yy): ");
scanf("%d /%d /%d", &m1, &d1, &y1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d /%d /%d", &m2, &d2, &y2);
// if/else statements for comparison
if (y1 < y2)
first_date = true;
else if (y1 > y2)
first_date = false;
else if (m1 < m2)
first_date = true;
else if (m1 > m2)
first_date = false;
else if (d1 < d2)
first_date = true;
else if (d1 > d2)
first_date = false;
else
printf("The dates are the same.\n");
if (first_date == true)
{
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
}
else if (first_date == false)
{
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
}
// End program
return(0);
}
这是一个逻辑问题,你需要 3 个状态而不是两个。像这样尝试
int result; /* 1 for <, 2 for > and 0 for equality */
result = 0; /* By default, they compare equal unless ... */
if (y1 < y2)
result = 1;
else if (y1 > y2)
result = 2;
else if (m1 < m2)
result = 1;
else if (m1 > m2)
result = 2;
else if (d1 < d2)
result = 1;
else if (d1 > d2)
result = 2;
switch (result)
{
case 1:
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
break;
case 2:
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
break;
case 3:
printf("The dates are the same.\n");
break;
}
您的程序运行正常,因为当程序到达 if (first_date ...
部分时 first_date
是 true
。
一个快速解决方法是在最后两个 if 情况下添加另一个 if 语句并使用另一个 bool。然后,当您的程序打印出日期相同时,可以更新布尔值。修改后的程序看起来像这样:
// Preprocessor directives
#include <stdio.h>
#include <stdbool.h>
// Call main function
int main (void)
{
// Declare variables
int d1, m1, y1, d2, m2, y2;
bool first_date = true;
bool same = false; //NEW BOOL
// Prompt user to enter information
printf("Enter first date (mm/dd/yy): ");
scanf("%d /%d /%d", &m1, &d1, &y1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d /%d /%d", &m2, &d2, &y2);
// if/else statements for comparison
if (y1 < y2)
first_date = true;
else if (y1 > y2)
first_date = false;
else if (m1 < m2)
first_date = true;
else if (m1 > m2)
first_date = false;
else if (d1 < d2)
first_date = true;
else if (d1 > d2)
first_date = false;
else {
printf("The dates are the same.\n");
same = true; //CHANGE VALUE IF SAME
}
if(same == false){
if (first_date == true)
{
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
}
else if (first_date == false)
{
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
}
}
// End program
return(0);
}
我认为这对你有用。
我正在尝试 运行 这个程序,它要求用户以 mm/dd/yy 格式输入两个日期。在输入两个日期后,程序应该比较两个日期以查看哪个日期较大。我 运行 遇到的问题是,当我在同一日期输入时,代码吐出 "The dates are the same." 但它继续打印 1/1/1 早于 1/1/1(假设1/1/1 是输入两次的日期)。当代码相同时,如何跳过下一个代码?我希望程序在输入相同日期后结束。
下面是我目前的代码。我也在使用 bool,但不确定我是否使用正确。
// Preprocessor directives
#include <stdio.h>
#include <stdbool.h>
// Call main function
int main (void)
{
// Declare variables
int d1, m1, y1, d2, m2, y2;
bool first_date = true;
// Prompt user to enter information
printf("Enter first date (mm/dd/yy): ");
scanf("%d /%d /%d", &m1, &d1, &y1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d /%d /%d", &m2, &d2, &y2);
// if/else statements for comparison
if (y1 < y2)
first_date = true;
else if (y1 > y2)
first_date = false;
else if (m1 < m2)
first_date = true;
else if (m1 > m2)
first_date = false;
else if (d1 < d2)
first_date = true;
else if (d1 > d2)
first_date = false;
else
printf("The dates are the same.\n");
if (first_date == true)
{
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
}
else if (first_date == false)
{
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
}
// End program
return(0);
}
这是一个逻辑问题,你需要 3 个状态而不是两个。像这样尝试
int result; /* 1 for <, 2 for > and 0 for equality */
result = 0; /* By default, they compare equal unless ... */
if (y1 < y2)
result = 1;
else if (y1 > y2)
result = 2;
else if (m1 < m2)
result = 1;
else if (m1 > m2)
result = 2;
else if (d1 < d2)
result = 1;
else if (d1 > d2)
result = 2;
switch (result)
{
case 1:
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
break;
case 2:
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
break;
case 3:
printf("The dates are the same.\n");
break;
}
您的程序运行正常,因为当程序到达 if (first_date ...
部分时 first_date
是 true
。
一个快速解决方法是在最后两个 if 情况下添加另一个 if 语句并使用另一个 bool。然后,当您的程序打印出日期相同时,可以更新布尔值。修改后的程序看起来像这样:
// Preprocessor directives
#include <stdio.h>
#include <stdbool.h>
// Call main function
int main (void)
{
// Declare variables
int d1, m1, y1, d2, m2, y2;
bool first_date = true;
bool same = false; //NEW BOOL
// Prompt user to enter information
printf("Enter first date (mm/dd/yy): ");
scanf("%d /%d /%d", &m1, &d1, &y1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d /%d /%d", &m2, &d2, &y2);
// if/else statements for comparison
if (y1 < y2)
first_date = true;
else if (y1 > y2)
first_date = false;
else if (m1 < m2)
first_date = true;
else if (m1 > m2)
first_date = false;
else if (d1 < d2)
first_date = true;
else if (d1 > d2)
first_date = false;
else {
printf("The dates are the same.\n");
same = true; //CHANGE VALUE IF SAME
}
if(same == false){
if (first_date == true)
{
printf("%d/%d/%d is earlier ijijthan %d/%d/%d\n", m1, d1, y1, m2, d2, y2);
}
else if (first_date == false)
{
printf("%d/%d/%d is earlier than %d/%d/%d\n", m2, d2, y2, m1, d1, y1);
}
}
// End program
return(0);
}
我认为这对你有用。