Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 17.03.2012
Сообщений: 14

Не выполняется код после цикла

17.03.2012, 13:24. Показов 1787. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. 2 дня назад я решил серьёзно взяться за изучение С. По совету многих знакомых читаю Кернигана и Ритчи. У меня не работает пример подсчёта символов (1.5.2). Я немного изменил код из книги:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
/* подсчет вводимых символов; 1-я версия*/ 
main()
{
    long nc;
    nc = 0;
 
    while (getchar() != 48)
        ++nc;
    printf("%ld\n", nc);
    getchar();
}
Консоль, несмотря на getchar(), появляется и исчезает мгновенно. Подскажите, что не так. Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2012, 13:24
Ответы с готовыми решениями:

Что нужно добавить в код, чтоб он сразу не закрывался после завершения цикла
Здравствуйте,подскажите пожалуйста, что нужно добавить в код, чтоб он сразу не закрывался после завершения цикла, и чтоб его предыдущие...

Не выполняется условие для окончания цикла
Подскажите в чем прикол? пишу условия для окончания цикла , j-&gt;next!=i|| i!=j записать пробовал по разному и в скобки заключал разное...

Если ввести один символ, то итерация цикла выполняется сразу два раза подряд
while (getchar()) printf(&quot;Итерация цикла.\n&quot;); Если ввести 1-ин символ, то итерация цикла выполняется сразу два раза подряд. Если...

16
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.03.2012, 14:25
Попробуйте вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
main()
{
    long nc = 0;
 
    while ( getchar() != 48 )
    {
        printf( "%d\n", nc );
        nc++;
    }
    
    //getchar();
}
0
2 / 2 / 0
Регистрация: 17.03.2012
Сообщений: 14
17.03.2012, 14:33  [ТС]
48 - ASCII код символа "0".
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.03.2012, 14:38
Цитата Сообщение от FlowMaster Посмотреть сообщение
48 - ASCII код символа "0".
Обновите страницу
0
6 / 6 / 1
Регистрация: 04.12.2011
Сообщений: 35
17.03.2012, 14:39
Ага,уже все ясно, только один вопрос зачем long?
while (getchar() != 48)
Нужно поставить два getchar();
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.03.2012, 14:43
Цитата Сообщение от andry-raser Посмотреть сообщение
Аххаах=)))
Мне смешно если честно, это хорошо что начал учить С, а думать не нужно?
Ну это ясно , но вот зачем long?? Ну да ладно - nc = 0;
И сразу же проверка
а вдруг у нас в АСКИ случайным образом 0 = 48?
while (getchar() != 48)
Вот и весь секрет.
Что смешного?
Если пользователь вводит 0 и ентер программа закрывается, если вводит слово и ентер, то выводит кол-во букв в слове.
0
6 / 6 / 1
Регистрация: 04.12.2011
Сообщений: 35
17.03.2012, 14:47
programina , извини моя вина,Пост поправил, я просто занят был, начал читать с 2 поста.
Там насколько я знаю лучше сделать key = getchar();
while(key!=27)
И траляля , и лучше 2 getchar
0
2 / 2 / 0
Регистрация: 17.03.2012
Сообщений: 14
17.03.2012, 15:07  [ТС]
Непонятно, почему после ввода "0" консоль закрывается. По-моему, программа просто должна выходить из цикла, попадать на getchar() и только после этого закрываться. Разве не так?
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.03.2012, 15:19
Цитата Сообщение от FlowMaster Посмотреть сообщение
Непонятно, почему после ввода "0" консоль закрывается. По-моему, программа просто должна выходить из цикла, попадать на getchar() и только после этого закрываться. Разве не так?
Это из-за того, что в цикле тоже getchar используется, просто напишите после getchar(); еще одну getchar();

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
main()
{
        long nc = 0;
 
        while ( getchar() != 48 )
        {
            printf( "%d\n", nc );
            nc++;
        }
    
        getchar();
        printf( "Najmite lyubuyu knopku dlya vyhoda...\n" ); // Нажмите любую кнопку для выхода
        getchar();
}
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
17.03.2012, 15:26
Цитата Сообщение от FlowMaster Посмотреть сообщение
Непонятно, почему после ввода "0" консоль закрывается. По-моему, программа просто должна выходить из цикла, попадать на getchar() и только после этого закрываться. Разве не так?
да прибудит с тобой очищение потока стдин перед вторым getchar
C++
1
 fflush(stdin);
Добавлено через 3 минуты
Цитата Сообщение от programina Посмотреть сообщение
Это из-за того, что в цикле тоже getchar
из за того что поток "мусором" заполняется при выводе
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
17.03.2012, 15:31
Цитата Сообщение от Van111 Посмотреть сообщение
да прибудит с тобой очищение потока стдин перед вторым getchar
C
1
fflush(stdin);
Опасная конструкция, потому как стандартом не определено поведение функции для входного потока.

Цитата Сообщение от Van111 Посмотреть сообщение
из за того что поток "мусором" заполняется при выводе
никакого мусора нет, в потоке остается символ перевода строки.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
17.03.2012, 15:38
Цитата Сообщение от kazak Посмотреть сообщение
в потоке остается символ перевода строки
странно а почему разработчики этих функций не сделали удаление символа перевода строки
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
17.03.2012, 16:19
Цитата Сообщение от Van111 Посмотреть сообщение
странно а почему разработчики этих функций не сделали удаление символа перевода строки
Это должен решать программист, в некоторых случаях остаток в буфере является мусором, а в некоторых может требовать дополнительной обработки.
0
6 / 6 / 1
Регистрация: 04.12.2011
Сообщений: 35
17.03.2012, 16:42
Ну я же еще в начале это написал.Поставить два getchar и все ! проблема решена , а что вы здесь пишите это уже.....
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
17.03.2012, 16:45
Цитата Сообщение от andry-raser Посмотреть сообщение
Поставить два getchar и все ! проблема решена
Проблема не решена. Выход из цикла при вводе цифры 0. Попробуйте ввести строку "11110111", допустим, и посмотрите как ваши два getchar'а отработают
2
2 / 2 / 0
Регистрация: 17.03.2012
Сообщений: 14
17.03.2012, 17:17  [ТС]
Всем спасибо. Буду учиться дальше.
2
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.03.2012, 18:13
Можно еще вот так. Программа будет спрашивать надо еще или выход (y/n)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main()
{
        long nc = 0;
        
        label:                          // Ìåòêà äëÿ âîçâðàùåíèÿ
        
    printf( "Napishite chto-nibud'\n");         // Íàïèøèòå ÷òî-íèáóäü
            
    while ( getchar() != 10 )               // ïîêà íå áóäåò íàæàòà êëàâèøà Enter
    {
        nc ++;
        printf( "%d\n", nc );           
    }
        
        printf( "\nProdoljit'? Y/N ...\n" );            // Ïðîäîëæèòü? y - äà, n - Âûéòè èç ïðîãðàììû
        
    if  ( getchar() == 'n' )    { return 0; }
    else if ( getchar() == 'y' )    { goto label; }
    else                { goto label; }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2012, 18:13
Помогаю со студенческими работами здесь

Функция выполняется не во время цикла - а после выхода из него
В общем светодиоды должны загорать один за другим во время выполнения цикла, но они загораются все после окончания цикла. Подскажите как...

Не выполняется код после for в функции main
Не выполняется код после for в функции main. В чем заключается ошибка? #include &quot;stdafx.h&quot; #include &quot;string&quot; ...

Код выполняется сразу, а должен после загрузки страницы.
Я написал процедуру, которая должна выполняться по нажатию кнопки, а она (зараза, сволочь,ненавижу...) шпарит прямо после загрузки...

Тело какого из перечисленных операторов цикла выполняется как минимум один раз, независимо от значения параметра цикла
Оператор цикла, тело которого выполняется как минимум один раз независимо от значения параметра цикла: 1. WHILE 2. REPEAT 3. FOR X=A...

Не работает код после цикла
Доброго времени суток, в этом коде программа игнорирует все что написано после первого цикла. Ставил точку остановки на второй цикл - не...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru