2015-09-21 3 views
-7
#include <iostream> 
#include <conio.h> 
int main() 
{ 
    int i; 
    for (i = 1; i = 100; 1 + 1); 
    { 
     std::cout << i << " = " << i *i << std::endl; 
    } 
    do 
    { 
     std::cout << i << " = " << i *i << std::endl; 
    } while (i = 100) 
    getch(); 
} 

Почему это не работает вообще. Это sapoust, чтобы дать число кубов от 1 до 100, и оно просто открывается, и ничего не происходит. может кто-нибудь помочь?! Я просто новичок, и я не могу решить эту проблему. СпасибоПочему эта простая программа не работает?

ответ

4

У вас есть ряд ошибок, например.

for (i = 1 ; i = 100 ; 1+1) ; 

должно быть:

for (i = 1 ; i <= 100 ; i += 1) 

(обратите внимание на удаление паразитной ;, а также другие изменения).

также:

while (i = 100) 

должно быть:

while (i <= 100); 

(обратите внимание на добавление отсутствующей ;, а также изменение от = к <=).

Возможно, вы также хотите, чтобы повторно инициализировать i до петли do и увеличить его в цикле:

i = 1; 
do 
{ 
    std::cout << i << " = " << i * i << std::endl; 
    i += 1; 
} while (i <= 100); 
+2

В вашей «исправленной» версии есть как минимум две ошибки. –

+2

Ваша петля все еще неправильная –

+0

@ T.C. это «работа в процессе». ;-) –

0

1+1 в вашей для цикла является проблемой. Вы попадаете в бесконечную петлю. Вы никогда не увеличиваете i, поэтому он никогда не достигает 100 и никогда не выходит из цикла for. Существует вторая ошибка, как указано в других ответах. Изменение в вашей петле i = 100 до 1 <= 100.

0
#include <iostream> 
// delete because this is unneeded and emits error on some compilers 
//#include <conio.h> 
int main() 
{ 
    int i ; 
    for (i = 1 ; i <= 100 ; i++) // fix second and third expression and remove junk semicolon 
    { 
     std :: cout << i << " = " << i *i << std :: endl ; 
    } 
    i = 1; // add 
    do { 
     std :: cout << i << " = " << i *i << std :: endl ; 
    } while ((++i) <= 100); // change = to <=, update i and add semicolon 
    // delete because this is unneeded and emits error on some compilers 
    //getch() ; 
} 
+0

Спасибо, но я все равно получаю сообщение об ошибке «lvalue требуется как операнд приращения». –

+0

Этот код хорошо работает на [Wandbox] (http://melpon.org/wandbox/permlink/aKwawz9CcAyucI8E). – MikeCAT

0

Ваш цикл не так, вы, вероятно, хотите

#include <iostream> 
#include <conio.h> 
int main() 
{ 
    int i ; 
    for (i = 1 ; i < 100 ; i++) 
    { 
     std :: cout << i << " = " << i *i << std :: endl ; 
    } 

    getch() ; //no clue what this is, but you probably know 
} 
+0

Точка с запятой в конце строки 'for' должна быть удалена. – MikeCAT

+0

спасибо, упустил точку с запятой .. –

1

Do-While-петли муз завершаться точкой с запятой.

Для увеличения ваше значение необходимо должен написать i=i+1, i+=1, ++i или i++ вместо 1+1.

У вас есть полуцикл в конце вашего цикла for, который заставляет петлю ничего не делать.

Вы управляете вами петлями, пока i = 100, что всегда верно. Я также сомневаюсь, что вы имели в виду i == 100, поскольку оно всегда было бы ложным. Лучше писать i < 100 или i <= 100 (как для петли for, так и для while)

Вы не сбрасываете i между вами петлями.

И последнее, но не менее важное: вы не увеличиваете свой i в цикле while. поэтому этот цикл будет либо работать никогда, либо никогда, поскольку i никогда не изменяется.

#include <iostream> 
#include <conio.h> 
int main() 
{ 
    int i; 
    for (i = 1; i <= 100; ++i) 
    { 
     std::cout << i << " = " << i *i << std::endl; 
    } 
    i = 1; //Reset 
    do 
    { 
     std::cout << i << " = " << i *i << std::endl; 
     i++; 
    } while (i <= 100); 
    getch(); 
} 

Надеюсь, у меня есть все.

+0

'i = i + 1' также является альтернативой приращению' i', но я думаю, что полезно использовать 'i ++' или '++ i' для увеличения. – MikeCAT

+0

@MikeCAT Добавил его к моему ответу. Спасибо. –

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