C程序打印得很多

时间:2015-09-22 23:43:58

标签: c if-statement boolean-expression

我正在尝试运行此程序,该程序以mm / dd / yy格式询问用户两个日期。在输入两个之后,程序应该比较两个日期以查看哪个更大。我遇到的问题是,当我输入相同的日期时,代码会吐出"日期是相同的。"但它继续打印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);
}

2 个答案:

答案 0 :(得分:1)

这是一个逻辑问题,你需要3个状态而不是2个状态。试试这个

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;
}

当程序到达first_date部分时trueif (first_date ...,您的程序行为正常。

答案 1 :(得分:1)

快速解决方法是在最后两个情况下添加另一个if语句并使用另一个bool。然后,当您的程序打印出日期相同时,可以更新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);
}

我认为这对你有用。