#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
. Я что-то упустил здесь?
Заключите месяцы в скобки для ясности. (day == 1 && (month==1 || month == 2 || month == 3 || month ==4))
Ага. Я пропустил скобку. Спасибо за помощь.
@SparKot не только для ясности, но и для правильности.
вам нужно проверить день и месяц по-разному. Попробуйте это вместо этого:
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 это тоже важно, но не для определения структуры программы, а для удобства чтения
Я просто скопировал его код и вставил сюда. Так как && имеет более высокий приоритет, чем || круглые скобки оператора не имеют значения. Просто выдает предупреждение, а не ошибку. И я считаю, что ввод предоставлен наоборот, это фактическая причина этого вопроса.
Извините, этот ответ неверен, и форматирование вашего кода ужасно. ОП принял другой правильный ответ. Посмотри на это. Вы наверное что-то не так поняли.
Да, из-за вас, ребята. На самом деле, он принял мой ответ ранее. Затем он удалил, так как кто-то говорил об отступах и таких вещах, как вы. В отличие от вас, он удалил свой комментарий
Извините, что настаиваю, но ваш if ((day == 1 && month==1) || month == 2 || month == 3 || month ==4)
делает то же самое, что и исходный код ОП if (day == 1 && month==1 || month == 2 || month == 3 || month ==4)
. Прочтите все внимательно еще раз. Другой ответ был принят и проголосован по уважительной причине
Это то, что я сказал вам ранее (копипаста). Вы можете потратить некоторое время и прочитать его вопрос еще раз. Если ваши входные данные равны 7 и 2, он возвращает Зеленый, а Красный возвращается для 2 и 7. # Порядок входных данных является реальной причиной путаницы *
Хотя порядок ввода имеет значение, у этого кода все еще есть проблемы; он напечатает «Зеленый», если вы введете 2 для дня и 4 для месяца. Проблема, с которой сталкивается OP (и признала), заключается в том, что &&
имеет более высокий приоритет, чем ||
, поэтому будет выбрана «зеленая» ветвь, если month
равно 2, 3 или 4, независимо от стоимости day
. Это явно не то, что намеревается сделать ОП. Да, конечно, этот код выдает ожидаемые результаты для определенного набора входных данных, но он не выдает ожидаемые результаты для всех наборов входных данных.
JohnBode и Jabberwocky, спасибо за разъяснение. Я получил это в последнее время. Я удаляю этот ответ, так как он вообще бесполезен.
Вы читали это: en.cppreference.com/w/c/language/operator_precedence ?