![]() |
|
Модераторы: bsa |
![]()
|
|
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Начал изучать С. пользуюсь DevC++. Не понял, как там работает отладчик, поэтому решил задать вопрос.
Подскажите пож. почему программа вылетает после нажатия на 'q'. Т.е. почему ф-ия getchar() не срабатывает, а срабатывает только, если ее написать дважды. Ведь по идеи после printf() должна работать getchar() и ждать символ. или я не понял |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
что значит вылетает? Это сообщение отредактировал(а) Alca - 8.6.2010, 22:33 |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
в смысле завершается. не могу понять, почему она не ждет пока getchar() получит символ
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Два раза гетчар поставьте в конце. Суть проблемы рассказывать лень, она легко гуглится и на на этом форуме обсуждалась совсем недавно, пару дней назад.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
Добавлено через 57 секунд http://stackoverflow.com/questions/1432989...ing-two-getchar Это сообщение отредактировал(а) Alca - 8.6.2010, 22:53 |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Спасибо, я знаю, как пользоваться printf, scanf. Просто мне стал интересен именно этот момент. Как это загуглить я не знаю, а здесь поиск выдает 0 результ. по getchar. Буду признателен, если позже опишите проблему в кратце. Просто интересно. Заранее спасибо
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
http://forum.vingrad.ru/forum/topic-302367.html
Первый комментарий. Там про cin.get(), но разницы никакой. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
ну ты ввёл букву и нажал энтер. Вот getchar и обработал твой энтер как нажатую клавишу на клавиатуре. Или пиши два раза getchar() или очищай этот энтер так fflush(stdin);
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| sidiakin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Ну конечно же! как я про '\n' не подумал!? А поясните пожалуйста еще один момент:
Никак не могу понять зачем с-'0' Это сообщение отредактировал(а) sidiakin - 9.6.2010, 20:12 |
||||
|
|||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Есть таблица символов которая называется ASCII. Согласно её каждый символ имеет свой код от 1 до 255. Цифра 0 там имеет 48ой код. Цифра 1 - 49ый, 2 - 50ый и т.д. В переменной с записан код символа. Так вот, чтобы узнать какая там цифра находится, надо от с отнять 48 или '0'; --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Подскажите почему ругается компилятор при объявлении ф-ии getline():
4 \main.cpp expected identifier before numeric constant 4 \main.cpp expected `,' or `...' before numeric constant 4 \main.cpp ISO C++ forbids declaration of `parameter' with no type |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
из-за того что константа в объявлении |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
А так нельзя? Это пример из книги по С
|
|||
|
||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Возможно имелось ввиду это
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
потому что int getline(char line[], 1000); не правильно.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| sidiakin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Товарищи! Что не так в примере змейки?
При компиляции выдает ошибку: \main.cpp In function `void paramSnake()': \main.cpp request for member `x' in `snake', which is of non-class type `vec2i[50]' \main.cpp request for member `y' in `snake', which is of non-class type `vec2i[50]' |
||||
|
|||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Объясните, откуда в программе snake.x, если объявл. только snake[].x ?
Это сообщение отредактировал(а) sidiakin - 27.6.2010, 14:20 |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Изменил snake.x на snake[i].x вроде заработало
|
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Подскажите, почему не работает инструкция t[0].x - 2 ? Почему значение t[0].x не изменяется? Спасибо. |
|||
|
||||
| cutwater |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
sidiakin, может учебник по С почитать?
или
|
||||
|
|||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Извиняюсь, туплю. Вот посмотрите фрагмент:
То, что автор хочет в цикле проинициализировать все эл-ты массива, я понял. Но мне кажется, что какая т то ерунда получается??? Это сообщение отредактировал(а) sidiakin - 30.6.2010, 09:13 |
|||
|
||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Кажется я понял. Наверно автор хотел написать так:
|
|||
|
||||
| sidiakin |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Возникли проблемы в понимании синтаксиса. Поясните пожалуйста
По структурам:
Все понятно: описыв. новый тип данных под назв. Book, потом создаю перем. b типа Book. А как понимать записи типа:
Тут как? Создается массив структур, но имени у структуры нет? Получается, что я могу давать имя структурам, а могу и не давать??? И еще вопросик:
Тут как? Я создаю структуру с именем tagPOINT типа POINT ? Объясните пожалуйста! Вообще не понятно. |
||||||
|
|||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Структуру с типом tagPOINT и typedef с типом POINT (это в чистом С). После этого описания можно писать:
|
||||
|
|||||
| sidiakin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 16.10.2005 Репутация: нет Всего: нет |
Подскажите пож., как работает sizeof со структурами. Вот фрагмент описания:
Вот то, что получилось 7 - это понятно, а откуда еще 5 байт? Что за участки памяти для выравнивания элементов? Это сообщение отредактировал(а) sidiakin - 8.8.2010, 00:37 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Это фича многих компьютерный архитектур. А для некоторых - это вообще суровая необходимость.
Переменные в памяти должны начинаться с адреса, кратного их размеру. Т.е. 4х байтовая переменная (int к премеру) должна начинаться с адреса, кратного 4м (т.е. первые 2 бита в адресе должны быть нулями). В противном случае будет серьезное замедление при обращении к такой переменной (на x86 архитектуре), или вообще исполнение прекратится с ошибкой (на RISC архитектурах). Полей в структуре это тоже касается, поэтому компилятор и добавляет дырки между полями структуры, что бы все эти поля были правильно выровнены (предполагается, что адрес самой структуры выровнен по максимуму, это обеспечивает или сам компилятор - для локальных переменных структур, или run-time поддержка для структур на куче) |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Здесь int 16 битный. На 32 битной архитектуре будет 16 байт. Выкинь это старьё и найди нормальную книгу. В IT всё очень быстро меняется. Старайся читать наиболее свежую литературу.
double - 8 байт int - 2 байта char - 1 байт 8+2+1 = 11 Это сообщение отредактировал(а) Леопольд - 11.8.2010, 09:02 -------------------- вопросов больше чем ответов |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |