если утверждение всегда верно, даже с правильными входами? - PullRequest
0 голосов
/ 18 мая 2019

Я делаю некоторые проверки для ввода месяца в моем проекте. Я сканирую 2 символа. Допустим, я успешно принял «10» в качестве ввода. Затем с помощью оператора if я спрашиваю компилятор, было ли введенное значение больше 12 или меньше 01, но в любом случае выражение if всегда истинно.

#define MAX_DAY 2
#define MAX_MONTH 2
#define MAX_YEAR 4

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char day[MAX_DAY];
    char month[MAX_MONTH];
    char year[MAX_YEAR];
} date; //struct data

typedef struct {
    date date_of_flight;
} flight; //struct volo

int CheckMonth (flight list1);

int main() {

    flight list;

    int correct = 0;

    while (correct != 1) {
    printf("Month of departure: ");
    scanf("%2s", list.date_of_flight.month);
    correct = CheckMonth(list);
    }

    return 0;
}

int CheckMonth (flight list1) {

    int correct = 0;

    if ((list1.date_of_flight.month > 12) || (list1.date_of_flight.month < 01))  {
        printf("Wrong input. The right input should be between 01 (January) and 12 (December).\n");
    }
    else
    {
        correct = 1;
    }
    return correct;
}

Если вы спрашиваете себя, почему я использовал char month [] вместо простого int, то это потому, что если я сканирую «05» через int, scanf будет читать только 5.

1 Ответ

4 голосов
/ 18 мая 2019

Вам нужно сравнить строки в вашей функции.

if ((list1.date_of_flight.month > 12) || (list1.date_of_flight.month < 01))  {
    printf("Wrong input. The right input should be between 01 (January) and 12 (December).\n");

должно быть на самом деле:

if ((strcmp(list1.date_of_flight.month, "12") > 0 ) || (strcmp(list1.date_of_flight.month, "01") < 0))  {
    printf("Wrong input. The right input should be between 01 (January) and 12 (December).\n");
}

strcmp() - это функция в <string.h>.Возвращает 0, если две строки равны.

Возвращает отрицательное число, если первый другой символ в первой строке следует после этого во второй строке, на основе значения ASCII.

В противном случае возвращается положительное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...