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

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

Восстановить пароль Регистрация
 
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
22.07.2012, 21:30     Непонятный код? #1
Подскажите, что выполняется в следующем коде и каким образом?

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2012, 21:30     Непонятный код?
Посмотрите здесь:

C++ Непонятный Код
Непонятный typedef C++
C++ Непонятный синтаксис.
Непонятный код C++
C++. Непонятный символ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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"
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:18     Непонятный код? #3
В цикле выводится "> " и вводится массив символов, который помещается в память начиная с адреса buf[0]. Потом выводится "< " и два массива символов, начало первого находится по адресу buf[0], начало второго - по адресу buf[1]. Если в первый массив вводится более 3 символов, то он выходит за установленный размер массива, и перекрывает память, предназначенную для второго массива. Пример показывает, что выход за пределы массива возможен (программа работает), но делать так нельзя.
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.Как программа определяет, что нарушен размер массива?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 22:38     Непонятный код? #5
Цитата Сообщение от gmb124 Посмотреть сообщение
3.Как программа определяет, что нарушен размер массива?
Данный пример и показывает, что никак не определяет.

Добавлено через 2 минуты
Цитата Сообщение от gmb124 Посмотреть сообщение
1.Каким образом анализируется выражение: ( cout << "> " && cin >> buf[0] )
Сначала первое, если false, то сразу выход, если true, то проверяется второе.
Intel~lect
 Аватар для 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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 23:32     Непонятный код?
Еще ссылки по теме:

Код выдает непонятный результат -1.#IND C++
Непонятный цикл C++
Непонятный код и функция FindWindow C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 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 << . Я не знаю, но наверное, они существуют. Я ответил на вопрос: каким образом анализируется выражение.
Yandex
Объявления
22.07.2012, 23:32     Непонятный код?
Ответ Создать тему
Опции темы

Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru