Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
8 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 54
1

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

22.07.2012, 21:30. Просмотров 921. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2012, 21:30
Ответы с готовыми решениями:

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

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

Непонятный код с FreeLibrary
static int open_gl(void) { libGL = LoadLibraryW(L&quot;opengl32.dll&quot;); if(libGL != NULL) { ...

Непонятный код в книге Страуструпа
Периодически встречаются ошибки. Это тоже, или какой-то синтаксис (Скачал бесплатную VS - не...

6
59 / 59 / 8
Регистрация: 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
5472 / 4867 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:18 3
В цикле выводится "> " и вводится массив символов, который помещается в память начиная с адреса buf[0]. Потом выводится "< " и два массива символов, начало первого находится по адресу buf[0], начало второго - по адресу buf[1]. Если в первый массив вводится более 3 символов, то он выходит за установленный размер массива, и перекрывает память, предназначенную для второго массива. Пример показывает, что выход за пределы массива возможен (программа работает), но делать так нельзя.
1
8 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 54
22.07.2012, 22:28  [ТС] 4
Вот такие вопросы возникли:
1.Каким образом анализируется выражение: ( cout << "> " && cin >> buf[0] )
2.Что возвращает следующий операторы:cout << "> ",cin >> buf[0]
3.Как программа определяет, что нарушен размер массива?
0
5472 / 4867 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:38 5
Цитата Сообщение от gmb124 Посмотреть сообщение
3.Как программа определяет, что нарушен размер массива?
Данный пример и показывает, что никак не определяет.

Добавлено через 2 минуты
Цитата Сообщение от gmb124 Посмотреть сообщение
1.Каким образом анализируется выражение: ( cout << "> " && cin >> buf[0] )
Сначала первое, если false, то сразу выход, если true, то проверяется второе.
0
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
22.07.2012, 22:41 6
Цитата Сообщение от alsav22 Посмотреть сообщение
Сначала первое, если false, то сразу выход, если true, то проверяется второе.
C++
1
while ( cout << "> " && cin >> buf[0] )
А разве может первое выражение стать false? Мне кажется что оно всегда будет true.
0
5472 / 4867 / 831
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 23:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Непонятный синтаксис
Приветствую! Прошу помочь разобраться с пониманием следующей формы записи: PrintFormat(&quot;%d :...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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