nik324 Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Λοιπον παμε αμεσως στο ψητο int main(){ int a,b; printf("Enter first number: \n " ); scanf("%d" , &a); printf("Enter second number: \n " ); scanf("%d" , &; return 0; } Εχω προβλημα στον παραπανω κωδικα...γενικα οσες ποιο πολλες διαδοχικες prinf-scanf βαλω τοσο πιο εντονο ειναι το προβλημα.. Τα ιδια γινονται και σε διαφορετικους IDE Ειμαι ετοιμος να τρελαθω!
parsifal Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Δεν έχεις κάνει include την standard βιβλιοθήκη για Input/Output: #include <stdio.h> int main() { ... }
nik324 Δημοσ. 26 Οκτωβρίου 2013 Μέλος Δημοσ. 26 Οκτωβρίου 2013 Δεν έχεις κάνει include την standard βιβλιοθήκη για Input/Output: #include <stdio.h> int main() { ... } εννοειται οτι την εχω κανει απλα δεν το εγραψα εδω Oριστε αλλο ενα προβληματικο παραδειγμα #include<stdio.h> int main(){ char a ; char b ; int c; int d; int e; int f; scanf("%c" , &a); scanf("%c" , &; scanf("%d" , &c); scanf("%d" , &d); scanf("%d" , &e); scanf("%d" , &f); return 0; } μολις παρει το input απο την δευτερη scanf σταματαει να περνει απο τις υπολοιπες...και μολις τωρα παρατηρησα οτι αλλαζει ο τυπος
Timonkaipumpa Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Εάν θες να διαβάσεις, δες π.χ. εδώ και μετά εδώ.
PC_MAGAS Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Ακόμη το πρόβλημα μπορεί να λυθεί με: fflush(stdin); Μετά από scanf. Btw η scanf νομίζω είναι από τις κλασικές συναρτήσεις που μπορούν να προκαλέσουν buff overflow...
imitheos Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Ακόμη το πρόβλημα μπορεί να λυθεί με: fflush(stdin); Μετά από scanf. Btw η scanf νομίζω είναι από τις κλασικές συναρτήσεις που μπορούν να προκαλέσουν buff overflow... Χρησιμοποιώντας scanf πάντα θα έχεις κάποιο πρόβλημα. Όσον αφορά το συγκεκριμένο, αυτό που προτείνεις δεν είναι λύση. Εκτός ότι δεν θα βοηθήσει τον OP, η fflush δεν πρέπει να χρησιμοποιείται έτσι (με input streams όπως το stdin). Σε Visual Studio και κάποια άλλα περιβάλλοντα θα παίξει αλλά δεν είναι σίγουρο ότι θα παίξει παντού. πχ σε linux έχουμε: #include <stdio.h> int main(void) { int a = 0; while (a != 5) { scanf("%d", &a); printf("You entered %d\n", a); fflush(stdin); /* while (getchar() != '\n') continue(); */ } return 0; } Αποτέλεσμα: % ./a.out 2 19 3 4 9 You entered 2 You entered 19 You entered 3 You entered 4 You entered 9 2 5 You entered 2 You entered 5 Όπως βλέπουμε, η fflush δεν βοήθησε. Αν χρησιμοποιηθεί η getchar (που δουλεύει παντού) όπως φαίνεται στο σχόλιο έχουμε: % ./a.out 2 19 3 4 9 You entered 2 2 5 You entered 2 5 You entered 5 Με την getchar γλυτώνεις από το συγκεκριμένο πρόβλημα της scanf και σου μένουν μόλις άλλα 50.
ZAKKWYLDE Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Ναι κλασικό πρόβλημα. Εγώ προτιμώ συνήθως να χρησιμοποιώ fgets() και κάνω ότι conversion χρειάζεται.
Star_Light Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 (επεξεργασμένο) @imitheos διαφωνώ στο οτι ειναι πρόβλημα. Η scanf διαβάζει ακριβως οτι της δίνεις. Αρα δεν υπάρχει καποιο προβλημα. @nik234 μην υποτιμάς τον κώδικα γιατι ακομα και στα "γελοία" μπορει να την πατήσει κάποιος. Την πατησες αρα δεν ειναι γελοίο. Μπορεις να παίξεις και έτσι : int c; printf(" Give a character "); scanf("%d" , &c); while( c = getchar() != '\n' && c != EOF ) ; Απλά διαβάζεις μέχρι ο χρήστης να δώσει έναν χαρακτήρα ο οποιος δεν ειναι αλλαγή της τρέχουσας γραμμής. Ο έλεγχος του while θα δωσει FALSE αρα δεν θα εκτελεσει αλλο το σώμα του που ειναι μια μονο εντολή η κενή (μονο ερωτηματικό). Αν ειχες παραπανω απο μια τοτε θα επρεπε να βάλεις αγκύλες οπως σου ειπε ο imitheos πριν. Επεξ/σία 26 Οκτωβρίου 2013 από Star_Light
migf1 Δημοσ. 26 Οκτωβρίου 2013 Δημοσ. 26 Οκτωβρίου 2013 Έχεις πέσει κι εσύ 'θύμα' του line buffering (όπως η πλειοψηφία όσων χρησιμοποιούν την scanf() για να διαβάζουν την κύρια είσοδο). Είναι πολύ καλύτερα να χρησιμοποιείς fgets() και κατόπιν sscanf(), όπως ειπώθηκε ήδη. ΥΓ. Ένα ωραίο link για τα pitfalls του διαβάσματος της κύριας εισόδου με τις στάνταρ συναρτήσεις της C: http://home.datacomm.ch/t_wolf/tw/c/getting_input.html 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα