2013-02-15 3 views
0

Я новичок в программировании на C++, и перед вами стоит проблема, связанная с учебниками lynda.com. Это похоже на видео, но это не работает со мной.Printf does not pop

#include <stdio.h> 

enum { max_string = 127 }; 

static char string[max_string + 1 ] = ""; 

int main(int argc, char ** argv) { 
    printf("Type a string: "); 
    fgets(string, max_string, stdin); 
    printf("The string is %s", string); 
    return 0; 
} 

И когда я запускаю это что-то пустой появляется, и мне нужно, когда я право что-то вроде «эй» в одеяло пространстве, это происходит:

hey 
Type a string: The string is hey 

Это совершенно странно для меня, и у меня есть не знаю, что я делаю неправильно tbh. Я использую Eclipse кстати.

Может ли кто-нибудь помочь мне?

+1

Возможно, это не каноническое решение, а добавление 'fflush (stdout);' после первого выражения 'printf', которое должно это сделать. –

+3

Учебное пособие по C++, в котором вам предлагается использовать статический массив символов для ввода пользователем и printf/fgets? * Run! * – us2012

+0

http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – jogojapan

ответ

2

Похоже, что стандартный поток вывода буферизируется по строке, что означает, что текст, который вы печатаете, не отображается до тех пор, пока вы не напечатаете полную строку. Он должен быть небуферизованным, если вы пишете на интерактивном устройстве; возможно, что-то мешает системе осознавать, что устройство вывода является интерактивным.

Добавление

fflush(stdout); 

после вашей первой printf должен заставить "Type a string: " приглашение появиться сразу (и даже если ваш выход небуферизован, fflush(stdout) безвреден).

Я собирался предложить изменения вашей второй printf от:

printf("The string is %s", string); 

к:

printf("The string is %s\n", string); 

, чтобы обеспечить выход вашей программы заканчивается символом новой строки (некоторые системы могут шалить, если он ISN» t) - но fgets() фактически оставляет строку новой строки в вашей строке (если строка ввода не была очень длинной). В конце концов вы захотите иметь дело с такими вещами.