Δημοσιεύτηκε: 19 Φεβ 2012, 21:24
από migf1
stamatiou έγραψε:
migf1 έγραψε:Δεν πρέπει να διαβάζεις με fgets() το s. Πρέπει να διαβάζεις ολόκληρη την κύρια είσοδο με getchar().

Η getchar όμως χρειάζεται να πατηθεί enter για να πάρουμε τα δεδομένα. Έψαξα και λίγο στο γόογλε αλλά λέει ότι δεν υπάρχει τρόπος να γίνει αυτό με συνάρτηση από τις βασικές βιβλιοθήκες :/

Κι αυτό γιατί δουλεύει αφού δεν υπάρχει τρόπος; :P
Κώδικας: Επιλογή όλων

char *s_getany( int chunklen )
{
int i = 0; /* char counter */
char *s = NULL, *try = NULL;

/* sanity checks */
if ( chunklen < 1 || NULL == (s = calloc( chunklen+1, sizeof(char)) ) )
return NULL;

for (i=0; EOF != (s[i] = getchar()) && s[i] != '\n'; i++)
{
if ( i != 0 && i % chunklen == 0 ) /* needs realloc */
{
try = realloc(s, (i+chunklen+1) * sizeof(char) );
if ( !try ) { /* realloc failed */
free(s);
s = NULL;
return NULL;
}
s = try; /* accept realloc */
}
}
s[i] = '\0';

if ( NULL == (try = realloc(s, (i+1) * sizeof(char) )) )
return NULL;

return try;
}