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

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

Войти
Регистрация
Восстановить пароль
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

Объясните как работает программа - C++

11.10.2012, 20:04. Просмотров 308. Ответов 7
Метки нет (Все метки)

Данная программа делает подсчёт символов. Помогите разобраться как она работает. Сижу смотрю - и ступор просто
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    long nc;
    nc = 0;
    while(getchar()!=EOF) { // тут мы ввели значение например "привет"
        ++nc; //nc = 1
        printf("%ld\n", nc);// должно вывести 1, а выводит несколько чисел(7 ровно если слово "привет") на разных строках
    }
 
    getchar();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 20:04     Объясните как работает программа
Посмотрите здесь:

C++ Объясните пожалуйста как работает программа!!
Объясните, как работает программа C++
C++ Объясните, как работает программа
Объясните как работает программа C++
C++ Объясните как работает программа, которая заменяет 2 и больше подряд идущих пробела на один
C++ Объясните как работает программа
объясните как работает программа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
11.10.2012, 20:29     Объясните как работает программа #2
у тебя подсчет nc с 0 идет поменяй nc=0 на nc=1
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 20:29     Объясните как работает программа #3
То что ввели попадает в буфер ввода (в очередь ввода). При каждой итерации цикла getchar() будет извлекать оттуда по одному символу, при этом счётчик nc будет увеличиваться на единицу, и выводиться на экран. Цикл будет продолжаться пока не будет введён символ конца файла (Cntr + Z). Семь выводится потому, что считается ещё и символ новой строки ('\n'), который вводится при нажатии Enter.
Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
11.10.2012, 20:30     Объясните как работает программа #4
я за место printf cout поставил бы
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
11.10.2012, 20:40  [ТС]     Объясните как работает программа #5
Цитата Сообщение от alsav22 Посмотреть сообщение
То что ввели попадает в буфер ввода (в очередь ввода). При каждой итерации цикла getchar() будет извлекать оттуда по одному символу, при этом счётчик nc будет увеличиваться на единицу, и выводиться на экран. Цикл будет продолжаться пока не будет введён символ конца файла (Cntr + Z). Семь выводится потому, что считается ещё и символ новой строки ('\n'), который вводится при нажатии Enter.
Спасибо за вразумительный ответ
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 20:45     Объясните как работает программа #6
Чтобы это всё увидеть, наберите такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    long nc;
    nc = 0;
    unsigned char ch;
    while(true) 
    { 
        ch = getchar();
        
        ++nc;
        if (ch != '\n') 
           printf("%ld %c %d\n", nc, ch, (int)ch);
        else printf("%ld \\n %d\n", nc, (int)ch);
    }
 
    getchar();
    return 0;
}
Будут видны символы, который getchar() извлекает и их коды. Код Enter - 10.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
11.10.2012, 20:59  [ТС]     Объясните как работает программа #7
Разобрался, всем спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2012, 21:09     Объясните как работает программа
Еще ссылки по теме:

C++ Объясните, как работает программа
Объясните как работает эта программа C++
C++ Объясните пожалуйста как работает программа
Объясните как работает программа C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 21:09     Объясните как работает программа #8
Цитата Сообщение от aleksand Посмотреть сообщение
Почему у нас независимо от того что мы введём(имеется ввиду просто enter или слово+ enter) у нас всё равно выводится одно и тоже количество nl(хотя у нас чётко написано, что только если у нас c=='\n', т.е. только ввод клавиши интер, а не слово + enter)?
Потому что, если вводите слово + Enter или просто Enter, nl считает только количество Enter. А сколько их, в этих двух вводах? По одному.
Yandex
Объявления
11.10.2012, 21:09     Объясните как работает программа
Ответ Создать тему
Опции темы

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