Δημοσιεύτηκε: 03 Μαρ 2012, 15:50
Ωραίος! Να και μια πιο συνεπτυγμένη εκδοχή του ίδιου κώδικα...
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <ctype.h>
#define MAXINPUT (255+1)
int main(void)
{
int i = 0;
char msg[MAXINPUT] = {'\0'};
for (i=0; '\n' != (msg[i] = toupper(getchar())); i++ )
switch (msg[i]) {
case 'A': putchar('4'); break;
case 'B': putchar('8'); break;
case 'E': putchar('3'); break;
case 'I': putchar('1'); break;
case 'O': putchar('0'); break;
case 'S': putchar('5'); break;
default: putchar(msg[i]); break;
}
puts("!!!!!!!!!!");
return 0;
}
Βέβαια δεν ξέρω αν εννοεί αυτό ακριβώς η άσκηση (ίσως π.χ. να εννοεί να μπουν τα θαυμαστικά μέσα στον πίνακα, δεν το ξεκαθαρίζει).
έγραψε:migf1 έγραψε:Τώρα που το ξανασκέφτομαι, αν θέλεις να χρησιμοποιήσει VLA, μπορείς να ρωτάς τον χρήστη ποιο είναι το μέγιστο μέγεθος για το string
Δεν νομίζω ότι είναι τόσο βολικό και πρακτικό. Θα πρέπει να γίνεται και έλεγχος μήπως έδωσε μέγεθος μεγαλύτερο αυτού που δήλωσε.
Yeap
έγραψε:Τα αρνητικά του να δηλώσουμε κατευθείαν ένα μεγάλο μέγεθος (251+1 πχ) ποια είναι; Θα "σπαταληθεί" περισσότερη μνήμη;
Ναι! Βέβαια στην προκειμένη περίπτωση μιλάμε για 252 bytes (στις περισσότερες πλατφόρμες το sizeof(char) είναι 1 byte). Επίσης, οι φλοιοί έχουν μέγιστο πλήθος χαρακτήρων που σε αφήνουν να πληκτρολογήσεις στη γραμμή εντολών (στα Windows είναι 256, στον bash δεν ξέρω)... δεν θυμάμαι μήπως υπάρχει κάποιο predefined #define στα στάνταρ header files που να το έχει (πρέπει να υπάρχει σε κάνα stdio.h, αλλά δεν θυμάμαι... για filenames υπάρχει ένα, FILENAME_MAX ή κάπως έτσι).