2013-10-09 3 views
2

У меня есть этот код.Операции сканирования, выполненные до печати

#include <stdio.h> 
int main(void) 
{ 
    int dogs; 
    printf("How many dogs do you have?\n"); 
    scanf("%d", &dogs); 
    printf("So you have %d dog(s)!\n", dogs); 
    return 0; 
} 

Насколько мне известно, при выполнении, программа будет сказать: «Сколько собак у вас есть», и я ввести номер. Вместо этого я получаю пустую страницу, и мне нужно сначала ввести цифру. Затем я получаю

Сколько у вас собак? Итак, у вас есть 3 собаки (ов)! (если я ввожу 3)

Я использую Eclipse + MinGW, и его мой первый раз с использованием C, поэтому я не уверен, что мне нужно/нужно было настроить.

+1

Я бы сказал, что у вас проблемы с Eclipse. [См. Это в прямом эфире] (http://ideone.com/VSeGaD). – WhozCraig

+0

Я бы тоже так сказал. Он отлично работает на CodeBlocks. Не уверен, что у меня есть. –

+0

Из любопытства все еще не удается с Eclipse и MinGW, если вы попытаетесь сбросить 'stdout' между первой' printf' и 'scanf'? –

ответ

1

Мне удалось решить эту проблему. Проблема заключалась в том, что eclipse сначала обрабатывал все инструкции сканирования, а затем обрабатывал все операторы печати. Это было бы трудно решить, если ваша программа имеет более одного оператора сканирования.

Исправление несколько прост. Загрузите бинарное исправление с following link.

Затем вам необходимо вставить файл starter.exe в путь, на котором установлен Eclipse.

В моем случае это было это затмение \ Plugins \ org.eclipse.cdt.core.win32.x86_64_5.2.0.201309180223 \ ОС \ win32 \ x86_64

Ваш может очень немного. Перезапишите существующий файл starter.exe, и он должен работать.

+0

работал ... спасибо тонну: D –

0

printf() Буферный выход. В общем случае (в UNIX) stdlib достаточно умен, чтобы сбросить stdout перед чтением stdin, но это может быть не так в MingW. Рассмотрите возможность использования fflush() или вывода на stderr.

+0

'\ n' требуется очистить выходной буфер, это не соответствует поведению. Вышеупомянутая ссылка показывает, что 'fflush (stdout)' действительно работает, но это определенно является одним из тех редких случаев, когда компилятор на самом деле ошибается. –

Смежные вопросы