Δημοσιεύτηκε: 27 Ιουν 2011, 22:12
από migf1
Δυστυχώς είναι το γνωστό πρόβλημα με line-buffering και την scanf() σε περιβάλλον Posix. Δοκίμασε την παρακάτω παραλλαγή του κώδικα...
(έχω βάλει σε σχόλια την παλιά διαδικασία εισόδου)
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAXLEN 255+1

// -----------------------------------------------------------------------------
char *s_get(char *s, size_t len)
{
char *cp;

for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
; // for-loop with empty body
*cp = '\0'; // null-terminate last character

return s;
}

// -----------------------------------------------------------------------------
void game( void )
{
char inbuf[MAXLEN];
int guess;
int real = rand() % 10;

printf("Please type a random number and then hit Enter:\n");
// fflush(stdin);
// scanf("%d", &guess);
s_get( inbuf, MAXLEN );
guess = atoi( inbuf );

while ( guess != real )
{
if (guess < real)
printf("No it is bigger...\n");
else
printf("No it is less...\n");

printf("Try again: ");
// fflush(stdin);
// scanf("%d", &guess);
s_get( inbuf, MAXLEN );
guess = atoi( inbuf );
}

return;
}

// -----------------------------------------------------------------------------
int main( void )
{
char yes_no[MAXLEN];

srand( time(NULL) );
do {
game();
printf("Well done!\nDo you want to play again (y/n)? ");
// fflush(stdin);
// scanf("%c", &yes_no);
s_get(yes_no, MAXLEN);
} while ( *yes_no == 'y' );

return 0;
}