Δημοσιεύτηκε: 27 Ιουν 2011, 22:12
Δυστυχώς είναι το γνωστό πρόβλημα με 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;
}