2015-02-04 3 views
3

Я только начинаю изучать программирование на С, поэтому я не нахожусь на продвинутом уровне. Потерпите меня!'else' без предыдущего 'if'

У меня есть этот кусок кода, и я думаю, что довольно легко понять, что я пытаюсь сделать. Тем не менее, я получаю сообщение об ошибке, когда вызывается последнее, но не до него.

Я подозреваю, что проблема в том, что это моя инструкция if-else между if и else. Как бы вы, ребята, решили?

int talet; 
scanf("%d", &talet); 

int i = 1; 
while (i <= 99) { 
    int a; { 
    if (i % talet == 0 || talet == (i/10) % 10 || talet == i % 10) { 
     if (talet % 10 == 0) 
     printf("\n"); 
     else 
     continue; 
    } 
    printf("burr "); 
    else 
     printf("%d ", i); 
    } 
    i = i + 1; 
} 
+4

Просто наблюдайте за размещением скобы еще раз. Они повсюду. – Lundin

+1

При отправке кода согласованный отступ имеет важное значение для удобства чтения. Кроме того, вкладки не работают хорошо на этом сайте, поэтому не забудьте использовать пробелы. Кроме того, с последовательным отступом, ваша проблема довольно очевидна. – crashmstr

+0

"* Я думаю, что довольно легко понять, что я пытаюсь сделать. *« Нет, это не так. Из чего мы должны заключить, как вы хотите, чтобы результат выглядел? – alk

ответ

4

Проблема заключается в ваших скобках. Отступы важно понять, где открыть и закрыть ваши кронштейны

int talet; 
scanf("%d",&talet); 

int i=1; 
while(i<=99) 
{ 
int a; 

    if (i%talet==0 || talet==(i/10)%10 ||talet==i%10) 
    { 
      if (talet%10==0) 
        printf("\n"); 
      else 
        continue; 

     printf("burr "); 
    } 
    else 
    { 
     printf("%d ",i); 
    } 
    i=i+1; 
} 
+1

Я предполагаю, что это работает для вас, я счастлив, что смогу вам помочь. Удачи! – phil652

8

Ваша проблема здесь:

} 
    printf("burr "); //<--- 
else 
    printf("%d ",i); 

Вы не можете иметь какие-либо заявления до блока еще. Поэтому удалите его или переместите его внутри else или if block, примерно так:

} else { 
    printf("burr "); 
    printf("%d ",i); 
} 
+0

Проблема в том, что я хочу, чтобы этот оператор был частью предыдущего if-statement. Я просто не хочу повторять его в «if и else» из «if», если вы понимаете, что я имею в виду – diaco

+0

@ diaco. Тогда просто положите его в предыдущее утверждение if! – Rizier123

+0

Это был мой интуиция, и я подумал, что это действительно было внутри. Обратите внимание, что я ранее изучал Python. Может быть, поэтому я не понимаю этого. Итак, все внутри {} является частью выражения if другими словами? – diaco

4

Проблема заключается в том, что у вас есть printf за пределами if скобки. Из-за этого компилятор считает, что завершение выписки if завершено. Когда она достигает else, выдает ошибку, так как нет открытого if состояния

Вы должны иметь этого

if (i%talet==0 || talet==(i/10)%10 ||talet==i%10) 
{ 
    if (talet%10==0) 
     printf("\n"); 
    else 
     continue; 

    printf("burr "); // <-- this was moved 
} 
else 
    printf("%d ",i); 
1

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

Вы можете написать если еще HORSTMANN стиль:

if (condition) 
{ 
    #statements 
} 
else 
{ 
    #statements 
} 

или немного более компактный в стиле tbs1:

if (condition) { 
    #statements 
} else { 
    #statements 
} 

выбрать тот, который вы хотите, больше стилей в комментарии, предоставленные crashmstr (благодаря ему), и придерживайтесь его. Это улучшит качество кода.

+0

Я не знаю, что я бы назвал первый пример «oldschool», и я бы не связал второй пример исключительно с Java. [Стиль отступа] (http://en.wikipedia.org/wiki/Indent_style) – crashmstr

Смежные вопросы