rambo12345 Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 Καλησπέρα σας Έχω γράψει το παρακάτω πρόγραμμα όπου οι γραμμές με έντονα γράμματα δεν εκτελούνται καθόλου. Να σημειωθεί ότι αν σβήσω τον κώδικα εντός του βρόγχου αυτού που υπάρχει πάνω από τις γραμμές αυτές, μετά εκτελοούνται! Μπορέιτε να μου πείτε τι συμβαίνει; (το έτρεξα σε 2 compilers, codeblocks και dev c++ όμως και στα 2 το ίδιο). #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int number; char *name; }data; int main(void) { char buf[256]; int i=0, length=0; data table[4]; for (i=0; i<=3; i++) { printf ("\nGive number %d ", i+1); scanf ("%d", &table.number); printf ("Give name %d \n", i+1); gets(buf); length=strlen(buf); table.name=malloc((length+1)*sizeof(char)); strcpy(table.name, buf); } for (i=0; i<=3; i++) { printf ("\nNumber is %d \n", table.number); printf ("\nName is %s \n", table.name); } return 0; }
Giorgos65ert Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 Καλησπέρα σας Έχω γράψει το παρακάτω πρόγραμμα όπου οι γραμμές με έντονα γράμματα δεν εκτελούνται καθόλου. Να σημειωθεί ότι αν σβήσω τον κώδικα εντός του βρόγχου αυτού που υπάρχει πάνω από τις γραμμές αυτές, μετά εκτελοούνται! Μπορέιτε να μου πείτε τι συμβαίνει; (το έτρεξα σε 2 compilers, codeblocks και dev c++ όμως και στα 2 το ίδιο). #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int number; char *name; }data; int main(void) { char buf[256]; int i=0, length=0; data table[4]; for (i=0; i<=3; i++) { printf ("\nGive number %d ", i+1); scanf ("%d", &table.number); printf ("Give name %d \n", i+1); gets(buf); length=strlen(buf); table.name=malloc((length+1)*sizeof(char)); strcpy(table.name, buf); } for (i=0; i<=3; i++) { printf ("\nNumber is %d \n", table.number); printf ("\nName is %s \n", table.name); } return 0; } χρησιμοποίησε την fgets. http://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm
rambo12345 Δημοσ. 27 Ιανουαρίου 2016 Μέλος Δημοσ. 27 Ιανουαρίου 2016 Δεν είναι αυτό! το αντικατέστησα με fgets(buf,256,stdin) και πάλι τα ίδια..
Giorgos65ert Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 Δεν είναι αυτό! το αντικατέστησα με fgets(buf,256,stdin) και πάλι τα ίδια.. με την scanf("%s",buf); δουλεύει; αλλιώς δώσε περισσότερα στοιχειά (errors,τι ζητάς ακριβός να κανει το πρόγραμμα)
rambo12345 Δημοσ. 27 Ιανουαρίου 2016 Μέλος Δημοσ. 27 Ιανουαρίου 2016 με την scanf("%s",buf); δουλεύει; αλλιώς δώσε περισσότερα στοιχειά (errors,τι ζητάς ακριβός να κανει το πρόγραμμα) Φίλε δουλεύει με scanf ! errors δεν έβγαλε κανένα, ούτε προειδοποιήσεις.. Για ποιο λόγο όμως η εντολή δεν μπορούσε να εκτελεστεί;
dios231 Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 Εχω την εντυπωση επειδη ο name ειναι pointer θελεις -> και οχι .
Giorgos65ert Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 άπλα γιατί η gets διαβάζει μέχρι να βρει \n (κάλο είναι να μην την χρησιμοποιούμε γιατί είναι και obsolete άλλα και δεν την προτείνουν ακόμα και οι compilers τουλάχιστον ο gcc σου πετά warrning και επίσης έχει κακό ιστορικό) το πρόβλημα ήταν στην scanf άπλα έπρεπε να βάλεις scanf("%d\n",&...); gets(buf); και θα παίζει.
cvb~ Δημοσ. 27 Ιανουαρίου 2016 Δημοσ. 27 Ιανουαρίου 2016 Καλησπέρα, αν θες δες στην θέση της συνάρτηση gets να χρησιμοποιήσεις την scanf και να ενοποιήσεις τον κώδικα που βρίσκεται στους βρόχους σε μια for.
rambo12345 Δημοσ. 27 Ιανουαρίου 2016 Μέλος Δημοσ. 27 Ιανουαρίου 2016 άπλα γιατί η gets διαβάζει μέχρι να βρει \n (κάλο είναι να μην την χρησιμοποιούμε γιατί είναι και obsolete άλλα και δεν την προτείνουν ακόμα και οι compilers τουλάχιστον ο gcc σου πετά warrning και επίσης έχει κακό ιστορικό) το πρόβλημα ήταν στην scanf άπλα έπρεπε να βάλεις scanf("%d\n",&...); gets(buf); και θα παίζει. Σε ευχαριστώ πολύ φίλε μου!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα