Я (пере) изучаю программирование и начал с C. Моя IDE (если можно так сказать) - cygwin (32Bit) и Visual-Studio 2010 на Windows7. Я всегда компилирую код, который пишу, с помощью gcc (cygwin), а также с помощью компилятора VS2010. Думаю, я так делаю, потому что считаю, что это хороший способ обучения. Во всяком случае, я только что узнал о fflush (stdin), т.е. очистке буфера stdin. Кажется, хорошая функциональность, потому что иначе использование scanf кажется проблемой. Поэтому я написал приведенный ниже код на основе примера из моего учебника. Он компилируется как с gcc в cygwin, так и с VS2010. Когда я запускаю скомпилированную программу VS, она работает нормально (см. Ниже), когда я запускаю скомпилированную программу gcc в cygwin, fflush (stdin) не сбрасывает буфер stdin (см. Ниже). Я читал несколько тем о том, что fflush (stdin) в некоторых случаях имеет неопределенное поведение. Что бы это ни значило, я взял это из учебника программирования C для Linux. Если fflush (stdin) не является допустимым средством избавления от содержимого в буфере stdin, какой еще стандартный метод существует?
Большое спасибо за любые ответы!
== Программа запускается под Windows:
enter a long integer and a double
23.00 78.99
lint = 23
dt = 0.00
enter a five digits input
78493
u entered 78 and 493
== Программа запускается в Cygwin:
enter a long integer and a double
23.00 78.99
lint = 23
dt = 0.00
enter a five digits input
u entered 78 and 2665720
== КОД ====
long lint;
double dt;
int fp, sp;
char fn[50], ln[50];
/* using the l modifier to enter long integers and doubles */
puts ("enter a long integer and a double");
scanf("%ld %lf", &lint, &dt);
printf("lint = %d\ndt = %.2f\n", lint, dt);
fflush(stdin); /*DOES NOT WORK UNDER CYGWIN!?*/
/* use field width to split input */
puts("\nenter a five digits input");
scanf("%2d %3d", &fp, &sp);
printf("u entered %d and %d\n", fp, sp);