Συντονιστής: konnn

migf1 έγραψε:Ναι αυτό θέλουμε Γιώργο. Όχι δεν χρειάζεται πρώτα να πατήσει ENTER o χρήστης, μπορείς να μετράς κανονικά πόσα getchar() έχουν προηγηθεί του ENTER. Η καταμέτρηση ενδεχομένως να γίνει εκ των υστέρων πατηθεί το ENTER, αλλά τον κώδικά δεν τον ενδιαφέρει τι θα κάνει ο φλοιός.

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

stamatiou έγραψε:migf1 έγραψε:Δεν πρέπει να διαβάζεις με fgets() το s. Πρέπει να διαβάζεις ολόκληρη την κύρια είσοδο με getchar().
Η getchar όμως χρειάζεται να πατηθεί enter για να πάρουμε τα δεδομένα. Έψαξα και λίγο στο γόογλε αλλά λέει ότι δεν υπάρχει τρόπος να γίνει αυτό με συνάρτηση από τις βασικές βιβλιοθήκες :/
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;
}



if ( i != 0 && i % chunklen == 0 ) // Aπο i=1 θες αλλιώς δίνοντας 6 μήκος string μέχρι να φτάσει
// στο τελευταίο στοιχείο το οποίο ειναι αυτο που έχει υπόλοιπο i με chunklen 0
// δηλαδη 6/6 θα ήθελες 7 στοιχεία (απο i=0)


kostas@kostas-SSL:~/PROGRAMS$ ./dokimes
Give the length: 4
kostas@kostas-SSL:~/PROGRAMS$
