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

printf не выводи данные вне цикла. - C++

Восстановить пароль Регистрация
 
Shampe
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 10:35     printf не выводи данные вне цикла. #1
Здравствуйте!
Проблема состоит в том,что если printf стоит внутри какого-нибудь цикла,то данные выводятся нормально,но если этот printf перенести за пределы цикла,то информация по каким-то причинам не выводится.Причем пробовал запускать как в терминале так и в ide(code-blocks).

Вот примеры:
Так работает и все выводится,но,как вы понимаете,такой вывод неприемлем.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main() {
    int nc,c;
    nc=c=0;
    while ((c=getchar()) != EOF){
    if (c=='\n')
          nc++;
    printf("%d\n", nc);
    }
    return 0;
}
А вот так уже ничего не выводится
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
    int nc,c;
    nc=c=0;
    while ((c=getchar()) != EOF)
    if (c=='\n')
          nc++;
    printf("%d\n", nc);
    return 0;
}
Подскажите,пожалуйста,что делаю не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2011, 10:35     printf не выводи данные вне цикла.
Посмотрите здесь:

вывод на экран чисел 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12, с использованием одного цикла и что бы все printf были только в теле цикла C++
Выводи лишних символов в файл C++
C++ printf() (вне зависимости от значения k, в консоль выводилось двузначное число)
Чем ::printf предпочтительнее printf? C++
C++ Написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и процент нулей и выводи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2011, 10:57     printf не выводи данные вне цикла. #2
Цитата Сообщение от Shampe Посмотреть сообщение
А вот так уже ничего не выводится
странно, у меня всё нормально отработало:
Код
C:\cpp\strings>cl nccnt.c
Оптимизирующий 32-разрядный компилятор Microsoft (R) C/C++ версии 16.00.30319.01
 для 80x86
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

nccnt.c
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:nccnt.exe
nccnt.obj

C:\cpp\strings>nccnt.exe
bla bla bla
bla bla bla
bla bla bla
^Z
3

C:\cpp\strings>type nccnt.c
#include <stdio.h>
int main() {
    int nc,c;
    nc=c=0;
    while ((c=getchar()) != EOF)
    if (c=='\n')
          nc++;
    printf("%d\n", nc);
    return 0;
}

C:\cpp\strings>
Shampe
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 11:22  [ТС]     printf не выводи данные вне цикла. #3
у меня вывод от первого варианта(printf внутри цикла) такой:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
shampe@shampe:~/C$ cat hello.c
#include <stdio.h>
int main() {
int nc, c;
nc=c=0;
while ((c=getchar()) != EOF){
if (c=='\n')
nc++;
printf("%d", nc);
}
return 0;
}
shampe@shampe:~/C$ gcc hello.c
shampe@shampe:~/C$ ./a.out 
bla bla bla
000000000001^C
а во втором случае(printf вне цикла),такой:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
shampe@shampe:~/C$ cat hello.c
#include <stdio.h>
int main() {
int nc, c;
nc=c=0;
while ((c=getchar()) != EOF){
if (c=='\n')
nc++;
}
printf("%d", nc);
return 0;
}
shampe@shampe:~/C$ gcc hello.c
shampe@shampe:~/C$ ./a.out 
bla bla bla
^C
Т.е. не выводится вообще ничего.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2011, 11:26     printf не выводи данные вне цикла. #4
Цитата Сообщение от Shampe Посмотреть сообщение
Т.е. не выводится вообще ничего.
После того, как последнюю строку ввели и enter нажали, Ctrl D не пробовали нажимать?
Shampe
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 11:47  [ТС]     printf не выводи данные вне цикла. #5
Цитата Сообщение от easybudda Посмотреть сообщение
После того, как последнюю строку ввели и enter нажали, Ctrl D не пробовали нажимать?
Нет,не пробовал
Не могли бы Вы объяснить,что делает ctrl-d?

Добавлено через 13 минут
Цитата Сообщение от Shampe Посмотреть сообщение
Нет,не пробовал
Не могли бы Вы объяснить,что делает ctrl-d?
Извиняюсь - виндовая привычка,спрашивать не погуглив

Но появился следующий вопрос: почему ctrl-d не нужен,если printf внутри цикла,но нужен тогда,когда printf вне цикла?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2011, 13:25     printf не выводи данные вне цикла. #6
Цитата Сообщение от Shampe Посмотреть сообщение
почему ctrl-d не нужен,если printf внутри цикла,но нужен тогда,когда printf вне цикла?
Потому, что внутри цикла при каждой итерации выводится текущее значение переменной-счётчика, а вне цикла вывод отрабатывает, когда очередная попытка чтения вернёт EOF (что собственно и происходит после нажатия Ctrl D)...
Yandex
Объявления
10.01.2011, 13:25     printf не выводи данные вне цикла.
Ответ Создать тему
Опции темы

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