簡體   English   中英

C程序正在大量打印

[英]C program is printing to much

我正在嘗試運行該程序,要求用戶輸入兩個日期,格式為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);
}

這是一個邏輯問題,您需要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;
}

當程序到達if (first_date ...部分時,由於first_datetrue ,因此您的程序行為正確。

一個快速的解決方案是在最后兩個if情況附近添加另一個if語句,然后使用另一個布爾值。 然后,當程序打印日期相同時,可以更新布爾值。 修改后的程序如下所示:

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

我認為這對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM