поведение getchar в IDE NetBeans - PullRequest
0 голосов
/ 22 июля 2010

Компиляция этого кода с netbeans 6.8 C ++ (mingw)

    for(int i=0;i<100;i++)
    {
        printf("\r\ntest");
    }

    getchar();

Оно не печатает сто раз слово "тест" ..

Он просто выполняет getchar () перед циклом printf

Это проблема netbeans, потому что она выполняется через c: \ msys \ 1.0 \ bin \ sh.exe

очевидно, если я попробую это с командной строкой, это будет работать правильно

почему? кто-нибудь знает как это решить? спасибо

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Я собираюсь переместить ответ из комментариев к ответу, но как вики-сообщество.Я не хотел бы писать какой-то «псевдо-окончательный» ответ, который действительно был ударом в темноте, как это.

На основании симптома вывода, не появляющегося на терминале, я предложил вам добавитьfflush(stdout) до вызова getchar().fflush() - это стандартная библиотечная функция C, которая «сбрасывает» ожидающий вывод или ввод.

Я только что догадался, что ваш вывод printf() отправляется в буфер, и что вызов fflush(stdout) приведет к тому, что этот буфербыть отправленным на терминал, чтобы решить ваш симптом.

Вы могли бы использовать следующую макро- и переменную функцию, чтобы разрешить fflush после каждого printf:

/*
 * If the environment supplies vfprintf():
 */
#define printf    my_printf

int my_printf(const char * fmt, ...)
{
    int ret_val;
    va_list var_args;

    va_start(var_args, fmt);
    ret_val = vfprintf(stdout, fmt, var_args);
    va_end(var_args);

    fflush(stdout);

    return ret_val;
}

в противном случаевозможно:

/* If the environment lacks vfprintf() */
#define my_printf(args)  ((void)printf args, (void)fflush(stdout))

/*
 * Usage:
 * 
 * my_printf(("Format %s\r\n", "string"));
 *
 */
0 голосов
/ 27 февраля 2012

Попробуйте поменять терминал, где отображается программа, и она работает нормально

Щелкните правой кнопкой мыши по проекту, с которым вы работаете, -> свойства -> запустить -> «Тип консоли», установите для него внешний

И поле под ним называется «Тип внешнего терминала» для терминала вашей операционной системы.

Теперь все будет работать нормально:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...