Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
#1

Непонятный код? - C++

22.07.2012, 21:30. Просмотров 664. Ответов 6
Метки нет (Все метки)

Подскажите, что выполняется в следующем коде и каким образом?

C++
1
2
3
4
5
6
7
8
int main() {
    char buf[2][3];
    
    while ( cout << "> " && cin >> buf[0] )
        cout << "< " << buf[0] << "\n< " << buf[1] << endl;
    
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2012, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятный код? (C++):

Непонятный Код - C++
К какому языку относится следующий код: use Net::SSH2; my $user = &quot;root&quot;; my $pass = &quot;yahh&quot;; my $ip = &quot;127.0.0.1&quot;; my...

Непонятный код - C++
#define HEX__(n) 0x##n##LU #define B8__(x) ((x&amp;0x0000000FLU)?1:0)\ +((x&amp;0x000000F0LU)?2:0)\ ...

Непонятный код и функция FindWindow - C++
Есть код: CWnd* pWnd = CWnd::FindWindow(&quot;XLMAIN&quot;, NULL); if (pWnd != NULL) { TRACE(&quot;Excel window found\n&quot;); ...

Код выдает непонятный результат -1.#IND - C++
#include&lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; int main() { int a=-2,b=6; double x=-2,y=0,c=0.5; do { ...

Непонятный typedef - C++
typedef int (*LPMYDLLFUNC)(int,int); после данного typedef, LPMYDLLFUNC используется как указатель на функцию, принимающую два...

Непонятный синтаксис - C++
Вот есть обявление. sp&lt;DataSource&gt; source; sp&lt;DataSource&gt; это что? Спасибо!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
22.07.2012, 22:00 #2
вводится с клавиатуры строка, например - 123456789 указатель на это строку попадает в buf[0] поэтому получается что buf[0][0] = 1 .. buf[0][2] = 3, buf[1][0] = 4.. buf[1][2] = 6.. собственно массив этот хранит только 6 символов. Но в строчке
C++
1
cout << "< " << buf[0] << "\n< " << buf[1] << endl;
сначала выводится полностью введенная строка, так как buf[0] содержит указатель строки и соответственно выводится всё последовательно пока конец строки не встречается, далее выводится buf[1] который указывает на строку "456789" (то что осталось после первых трех символов) и таким же образом на экране эта строка "456789"
1
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:18 #3
В цикле выводится "> " и вводится массив символов, который помещается в память начиная с адреса buf[0]. Потом выводится "< " и два массива символов, начало первого находится по адресу buf[0], начало второго - по адресу buf[1]. Если в первый массив вводится более 3 символов, то он выходит за установленный размер массива, и перекрывает память, предназначенную для второго массива. Пример показывает, что выход за пределы массива возможен (программа работает), но делать так нельзя.
1
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
22.07.2012, 22:28  [ТС] #4
Вот такие вопросы возникли:
1.Каким образом анализируется выражение: ( cout << "> " && cin >> buf[0] )
2.Что возвращает следующий операторы:cout << "> ",cin >> buf[0]
3.Как программа определяет, что нарушен размер массива?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:38 #5
Цитата Сообщение от gmb124 Посмотреть сообщение
3.Как программа определяет, что нарушен размер массива?
Данный пример и показывает, что никак не определяет.

Добавлено через 2 минуты
Цитата Сообщение от gmb124 Посмотреть сообщение
1.Каким образом анализируется выражение: ( cout << "> " && cin >> buf[0] )
Сначала первое, если false, то сразу выход, если true, то проверяется второе.
0
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
22.07.2012, 22:41 #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Сначала первое, если false, то сразу выход, если true, то проверяется второе.
C++
1
while ( cout << "> " && cin >> buf[0] )
А разве может первое выражение стать false? Мне кажется что оно всегда будет true.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 23:32 #7
Цитата Сообщение от gmb124 Посмотреть сообщение
2.Что возвращает следующий операторы:cout << "> ",cin >> buf[0]
cout << возвращает cout (поэтому можно cout << 'a' << 'b'), cin >> возвращает cin (поэтому можно cin >> a >> b ). Возвращаемые значения, при анализе выражения, преобразуются в тип bool. Если успех, то true, если ошибка, то false.

Добавлено через 3 минуты
Цитата Сообщение от Intel~lect Посмотреть сообщение
А разве может первое выражение стать false? Мне кажется что оно всегда будет true.
Для этого нужно точно знать, какие ошибки возможны для cout << . Я не знаю, но наверное, они существуют. Я ответил на вопрос: каким образом анализируется выражение.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 23:32
Привет! Вот еще темы с ответами:

Непонятный вывод - C++
У меня есть следующий код функции на С++ void CursorPosition(HWND hWnd, int xPosition, int yPosition, int xCell, int yCell, int sx, int...

C++. Непонятный символ - C++
Что означает символ &quot;&amp;&quot; в языке C++? Например, void move(int &amp;a,int b) Можете дать ссылку на справку про синтаксис...

Непонятный синтаксис. - C++
В VC 2010 вместо int main(int argc, char *argv) написано int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpcmdline,...

Непонятный цикл - C++
for (int i = 0, r = n - 1; i &lt; r; ++i, --r) Объясните пожалуйста, это 2 цикла в одном? Можно ли как нибудь попроще его записать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.07.2012, 23:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru