Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Не понимаю почему так?


Автор: Luka 20.9.2004, 15:55
Вот три программки:

1
Код
#include <iostream.h>
using namespace std;
int main()
{
int first=10;
cout << first << endl;
first+=10;
cout << first << endl;
--first;
cout << first << endl;
return 0;
}


2
Код
#include <iostream.h>
using namespace std;
int main()
{
int count=10;
cout <<"count="<<count<<endl;
cout <<"count="<<++count<<endl;
cout <<"count="<<count<<endl;
cout <<"count="<<count++<<endl;
cout <<"count="<<count<<endl;
return 0;
}


3
Код
#include <iostream.h>
using namespace std;
int main()
{
int first=10;
cout << first << endl << first+=10 << endl << --first << endl;
return 0;
}


1 и 2 работают, а 3 нет.

Почему, так? qstn.gif

Автор: cardinal 20.9.2004, 16:39
Потому что не хватает скобок. Компилятору не нравится выражение first+=10, а лучше сказать он не знает что с ним делать smile.gif. Напиши так:
Код
#include <iostream.h>
using namespace std;
int main()
{
int first=10;
cout << first << endl << (first+=10) << endl << --first << endl;
return 0;
}

Я думаю результат тебя удивит. smile.gif

Автор: lynx_916 20.9.2004, 17:20
да, у меня такой же рецепт, но тока вот зачем первые 2 примера? qstn.gif

Автор: cardinal 20.9.2004, 18:00
Для того, чтобы написать, что первые два работают и спросить почему не работает третий. smile.gif

Автор: Luka 20.9.2004, 18:47
cardinal
Цитата
Я думаю результат тебя удивит.  smile.gif

19
19
9

wow.gif
А что, так и должно быть?

lynx_916
Цитата
но тока вот зачем первые 2 примера?

ну с начала я написал 3 , не заработала, затем решил разделить действия построчно, получилась 1 программа - заработала. Стал разбираться почему не работает 3. Подумал было, что нельзя производить действия такого типа в cout (т.е.: cout << a++). Нашел пример 2 программы, версия отпала. smile.gif
А вообще, мне казалось 3=1

Автор: Nastya 20.9.2004, 20:09
1. x+=10 - в отличае x++ - значения не возращает, void, он. Тольком объеснить не могу smile.gif Но в выражениях его лучше не использовать
2. В третьем примере довольно часто встречается глюк дебаговой версии откомпилируй в релизе результат может быть другим

Автор: cardinal 20.9.2004, 20:18
Цитата(Luka @ 20.9.2004, 17:47)
А что, так и должно быть?

Значения высчитываются справо налево, а потом выводятся слево направо. smile.gif
Цитата(Nastya @ 20.9.2004, 19:09)
1. x+=10 - в отличае x++ - значения не возращает, void, он.

На самом деле все произошло немного подругому. Я думаю это может еще и от компилятора зависить.
Вобщем вывод тут один: писать так не нужно!
Luka, лучши пиши как в первом варианте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)