Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу понять, как работает программа 
:(
    Опции темы
sidiakin
Дата 8.6.2010, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



Начал изучать С. пользуюсь DevC++. Не понял, как там работает отладчик, поэтому решил задать вопрос. 

Код

#include <stdio.h>

int main(){
    long nc = 0;
    while(getchar() != 'q')
                    ++nc;
    printf("%ld\n", nc);
    getchar();
}


Подскажите пож. почему программа вылетает после нажатия на 'q'. Т.е. почему ф-ия getchar() не срабатывает, а срабатывает только, если ее написать дважды. Ведь по идеи после printf() должна работать getchar() и ждать символ. или я не понял
PM MAIL   Вверх
Alca
Дата 8.6.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

почему программа вылетает после нажатия на 'q

что значит вылетает?


Это сообщение отредактировал(а) Alca - 8.6.2010, 22:33


--------------------
PM WWW ICQ Skype Jabber   Вверх
sidiakin
Дата 8.6.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



в смысле завершается. не могу понять, почему она не ждет пока getchar() получит символ
PM MAIL   Вверх
djamshud
Дата 8.6.2010, 22:51 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Два раза гетчар поставьте в конце. Суть проблемы рассказывать лень, она легко гуглится и на на этом форуме обсуждалась совсем недавно, пару дней назад.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Alca
Дата 8.6.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Код

int main(int argc, char* argv[]) {


        long nc = 0;
        char c;
        while(c = getchar()) {
            if (c == 'q') break;
            ++nc;
        }    
            
        
        printf("%ld\n", nc);
        fflush(stdin);    //<<<<<<<<<<<<<<<<<
                
        c = getchar();


    return 0;
}


Добавлено через 57 секунд
http://stackoverflow.com/questions/1432989...ing-two-getchar

Это сообщение отредактировал(а) Alca - 8.6.2010, 22:53


--------------------
PM WWW ICQ Skype Jabber   Вверх
sidiakin
Дата 8.6.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



Спасибо, я знаю, как пользоваться printf, scanf. Просто мне стал интересен именно этот момент. Как это загуглить я не знаю, а здесь поиск выдает 0 результ. по getchar. Буду признателен, если позже опишите проблему в кратце. Просто интересно. Заранее спасибо
PM MAIL   Вверх
djamshud
Дата 8.6.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM   Вверх
Ozerich
Дата 8.6.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 2.8.2009
Где: Минск, Беларусь

Репутация: 4
Всего: 5



ну ты ввёл букву и нажал энтер. Вот getchar и обработал твой энтер как нажатую клавишу на клавиатуре. Или пиши два раза getchar() или очищай этот энтер так  fflush(stdin);
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
sidiakin
Дата 9.6.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



Ну конечно же! как я про '\n' не подумал!? А поясните пожалуйста еще один момент:

Код

if (c >='0' && с <= '9')
            ++ndigit [c – '0'];


Цитата

if (c >= '0' && c <= '9') ...
определяет, является ли находящийся в c символ цифрой. Если это так, то

c –'0'

есть числовое значение цифры. Сказанное справедливо только в том случае, если для ряда значений '0','1', ..., '9' каждое следующее значение на 1 больше предыдущего. К счастью, это правило соблюдается во всех наборах символов.


Никак не могу понять зачем с-'0'

Это сообщение отредактировал(а) sidiakin - 9.6.2010, 20:12
PM MAIL   Вверх
Ozerich
Дата 9.6.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 2.8.2009
Где: Минск, Беларусь

Репутация: 4
Всего: 5



Цитата

Никак не могу понять зачем с-'0'

Есть таблица символов которая называется ASCII. Согласно её каждый символ имеет свой код от 1 до 255. Цифра 0 там имеет 48ой код. Цифра 1 - 49ый, 2 - 50ый и т.д. В переменной с записан код символа. Так вот, чтобы узнать какая там цифра находится, надо от с отнять 48 или '0';
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
sidiakin
Дата 9.6.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



Подскажите почему ругается компилятор при объявлении ф-ии getline():

Код

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], MAXLINE);
void copy(char to[], char from[]);

int main(){


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 
PM MAIL   Вверх
toxx
Дата 9.6.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Код

#define MAXLINE 1000

из-за того что константа в объявлении
PM MAIL   Вверх
sidiakin
Дата 9.6.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 16.10.2005

Репутация: нет
Всего: нет



А так нельзя? Это пример из книги по С
PM MAIL   Вверх
Ozerich
Дата 9.6.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 2.8.2009
Где: Минск, Беларусь

Репутация: 4
Всего: 5



Возможно имелось ввиду это
Код

int getline(char line[], int len);

--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
Dem_max
Дата 10.6.2010, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



потому что  int getline(char line[], 1000); не правильно.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.