2016-11-11 5 views
-1

им возникли проблемы с использованием нескольких операторов, а программирует простой FizzBuz в CНесколько операторов сравнения?

#include <stdio.h> 
int main(void) { 
    int n; 
    scanf("%d", &n); 
    if (0 < n < 10000){ 
     for (int i = 1; i <= n; i ++) { 
      if (i % 15 == 0) { 
       puts("TikTak"); 
      } 
      else if (i % 3 == 0) { 
       puts("Tik"); 
      } 
      else if (i % 5 == 0) { 
       puts("Tak"); 
      } 
      else { 
       printf("%d\n", i); 
      } 
     } 
    }else{ 
     printf("-1"); 
    } 
} 

Теперь «если (0 < п < 10000)» операторы сравнения игнорируется какой-то причине, но если я его переписать как:

if (n < 10000 && n > 0){ 

будет работать должным образом.

Я что-то не хватает? Не стесняйтесь, я новичок в программировании на C. haha

EDIT: Спасибо всем, ха-ха, это было очень просто. Я подумал, что это может быть проблемой, которую я просто ослабил, чтобы убедиться, что «0 < n < 10000» - это то, что, по словам ассистента, должно выглядеть так.

Опять же, спасибо!

+1

Возможно чтение текста книги на C поможет –

+2

Это довольно просто - C не использует математическое сравнение symbology.'if (0 <п < 10000)' ==> ', если (0 <п && п <10000)' –

ответ

2

Перепишем это условие

if (0 < n < 10000){ 

как

if (0 < n && n < 10000){ 

В противном случае исходное состояние выглядит как

if ((0 < n) < 10000){ 

и результат выражения 0 < n является либо 1 или 0. Так что вы сравниваете 0 или 1 с 10000.

От C стандарта (6.5.8) Операторы отношения

6 Каждый из операторов < (меньше),> (больше), < = (меньше или равно), и > = (больше или равно) должно дать 1, если заданное отношение истинно и 0, если оно неверно.107) Результат имеет номер типа int.

+0

Вот что я хотя, спасибо человеку. – Mathue24

+0

@ Mathue24 Нет вообще. Добро пожаловать. ^) –

0

0 < n < 10000 Выражение эквивалентно (0 < n) < 10000 означает, что вы проверить, если 0 < n меньше, чем 10000, что он всегда будет (результат сравнения, как 0 < n будет ноль или один).