Проблемы с операторами if else в C

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

int main(){

int month, day;
printf("Enter the input : ");
scanf("%d %d",&month,&day);

if (day == 1 &&  month==1 || month == 2 || month == 3 || month ==4){
    printf("Green\n");
}
else if (day == 2 && month == 5 || month == 6 || month ==7 || month ==8 ){
    printf("Red");
}

return 0;
}

В приведенном выше коде всякий раз, когда я выбираю d = 1 и month = 1-4 , он должен печатать зеленым цветом, что он делает правильно. Проблема в том, что когда я выбираю day = 2 & month = 8 or 7 or 6, он должен печатать red, но печатает green. Я что-то упустил здесь?

Вы читали это: en.cppreference.com/w/c/language/operator_precedence ?

Jabberwocky 22.03.2022 16:40

Заключите месяцы в скобки для ясности. (day == 1 && (month==1 || month == 2 || month == 3 || month ==4))

SparKot 22.03.2022 16:41

Ага. Я пропустил скобку. Спасибо за помощь.

winstonbrown 22.03.2022 16:50

@SparKot не только для ясности, но и для правильности.

Jabberwocky 22.03.2022 16:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вам нужно проверить день и месяц по-разному. Попробуйте это вместо этого:

if (day == 1 &&  (month==1 || month == 2 || month == 3 || month ==4)){
    printf("Green\n");
}
else if (day == 2 && (month == 5 || month == 6 || month ==7 || month ==8)){
    printf("Red");
}

Он просто отлично работает, как вы и ожидали.
Возможно, вы забыли, что ваш первый ввод — это month, а day — второй. Попробуйте еще раз сейчас.

#include <stdio.h> 
#include<stdlib.h> 
int main(){ 
int month, day; 
printf("Enter the input : "); 
scanf("%d %d",&month,&day); 
if ((day == 1 && month==1) || month == 2 || month == 3 || month ==4)
{ printf("Green\n"); } 
else if (day == 2 && month == 5 || month == 6 || month ==7 || month ==8 ){ 
printf("Red"); } 
return 0; 
}

Это просто неправильно, и отступы вашего кода ужасны. Ваше имя говорит о том, что вы знаете, что отступы наиболее важны в Python. В C это тоже важно, но не для определения структуры программы, а для удобства чтения

Jabberwocky 22.03.2022 16:53

Я просто скопировал его код и вставил сюда. Так как && имеет более высокий приоритет, чем || круглые скобки оператора не имеют значения. Просто выдает предупреждение, а не ошибку. И я считаю, что ввод предоставлен наоборот, это фактическая причина этого вопроса.

Python learner 22.03.2022 17:01

Извините, этот ответ неверен, и форматирование вашего кода ужасно. ОП принял другой правильный ответ. Посмотри на это. Вы наверное что-то не так поняли.

Jabberwocky 22.03.2022 17:03

Да, из-за вас, ребята. На самом деле, он принял мой ответ ранее. Затем он удалил, так как кто-то говорил об отступах и таких вещах, как вы. В отличие от вас, он удалил свой комментарий

Python learner 22.03.2022 17:09

Извините, что настаиваю, но ваш if ((day == 1 && month==1) || month == 2 || month == 3 || month ==4) делает то же самое, что и исходный код ОП if (day == 1 && month==1 || month == 2 || month == 3 || month ==4). Прочтите все внимательно еще раз. Другой ответ был принят и проголосован по уважительной причине

Jabberwocky 22.03.2022 17:13

Это то, что я сказал вам ранее (копипаста). Вы можете потратить некоторое время и прочитать его вопрос еще раз. Если ваши входные данные равны 7 и 2, он возвращает Зеленый, а Красный возвращается для 2 и 7. # Порядок входных данных является реальной причиной путаницы *

Python learner 22.03.2022 17:55

Хотя порядок ввода имеет значение, у этого кода все еще есть проблемы; он напечатает «Зеленый», если вы введете 2 для дня и 4 для месяца. Проблема, с которой сталкивается OP (и признала), заключается в том, что && имеет более высокий приоритет, чем ||, поэтому будет выбрана «зеленая» ветвь, если month равно 2, 3 или 4, независимо от стоимости day. Это явно не то, что намеревается сделать ОП. Да, конечно, этот код выдает ожидаемые результаты для определенного набора входных данных, но он не выдает ожидаемые результаты для всех наборов входных данных.

John Bode 22.03.2022 18:15

JohnBode и Jabberwocky, спасибо за разъяснение. Я получил это в последнее время. Я удаляю этот ответ, так как он вообще бесполезен.

Python learner 23.03.2022 02:08

Другие вопросы по теме