2016-11-16 2 views
-16

Есть много вопросов, подобных этому, но никто не мог мне помочь. Так что, как говорится в названии, он говорит иначе без предыдущего if. Пытались построить программу, которая будет подсчитывать количество из 1-1000, которые можно разделить на 2.«Else» без предыдущего «If»

#include <iostream> 
using namespace std; 
int main() 
{ 
    int a; 
    a=1; 
    while(a<=1000) 
     if(a%2==0) 
     cout<<a; 
     a++; 
     else 
     a++; 

     return 0; 
} 
+8

брекеты Put везде, где это необходимо. –

+7

Используйте фигурные скобки '{}'! –

+1

Чтобы быть ясным, результат 'if (a% 2 == 0)' is 'cout << a;' Тогда вы говорите 'a ++; else', и компилятор правильно говорит, что 'else' недействителен после' a ++; ' – Mawg

ответ

12

C++ не Python - пробел не изменяет поведение программы. Для того, чтобы как cout<<a и a++ принадлежат к истинной ветви тела if «s, вам необходимо заключить их в фигурные скобки, чтобы создать compound statement:

if(a%2==0) 
{ 
    cout<<a; 
    a++; 
} 
else 
{ 
    a++; 
} 
+2

Также обратите внимание, что g ++ и, вероятно, clang теперь выдает предупреждение, когда видит такой непревзойденный отступ. – Asu

+0

@ Асу ха? Какое предупреждение? Это ошибка без брекетов, и с ними все в порядке. – bolov

+5

@bolov: если не было ветви 'else', будет показано предупреждение, информирующее пользователя о том, что обе инструкции с отступом не являются частью тела if. –

1

Большинство языков программирования, если это - либо еще заявления работает только для одного если нет брекетов. Поэтому используйте фигурные скобки.

#include <iostream> 
using namespace std; 
    int main() 
{ 
    int a; 
    a=1; 
    while(a<=1000) 
    if(a%2==0){ 
    cout<<a; 
    a++; 
    }else{ 
    a++; 
    } 

    return 0; 
} 
0

это должно быть заменены или исправлены с помощью фигурных скобок {}

if(a%2==0) 
     cout<<a; 
     a++; 
     else 
     a++; 

C++, не является отступом компилируемый язык

сделать вместо:

if(a%2 == 0) 
{ 
    cout<<a; 
    a++; 
}else{ 
    a++; 
} 
+0

На самом деле вам не понадобится другое: if (a% 2 == 0) { cout << a; } a ++; – Steve

0

Во-первых, это непонятно, в чем проблема. Если вы спрашиваете, можно ли разместить else после чего-либо, что не является оператором if, тогда нет, цель else - выполнить код, если условие if является ложным. Если вы хотите знать, что не так с программой, вам нужно использовать скобки {}. Для цикла будет лучше для этого:

for(int a = 1;a<=1000;a++){ 
    if((a%2)==0){ 
     cout<<a<<' '; 
    } 
} 

Вы также забыли напечатать пробел после печати a, вы должны исправить это.

0

Как и другие ответ: использование брекет ... и факторизуются: если все, что вы делаете (a++) в else то же самое, чем во второй части if, то вы можете переписать ваш главный как:

#include <iostream> 

using namespace std; 

int main() { 
    int a = 1; 
    while (a<=1000) { 
    if (a%2==0) { 
     cout<<a; 
    } 
    ++a; 
    } 
    return 0; 
} 

Или, потому что цель цикла for:

for (int a = 1; i <= 1000; ++a) { 
    if (a%2==0) { 
     cout << a; 
    } 
    } 
Смежные вопросы