cyber_katsarida Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 δεν μπορώ να καταλάβω που είναι το λάθος. χρησιμοποιώ το code::blocks όταν το τρέχω στην 3η do while εμφανίζεται η Printf 2 φορές. κάτι παίζει με τη εισαγωγή του χαρακτήρα μάλλον >#include<stdio.h> struct pro { int code; float pos; char pit; float ap; }; main() { struct pro pinakas[2]; int i; for(i=0;i<2;i++) { do{ printf("%d-code\n",i); scanf("%d",&pinakas[i].code); }while(pinakas[i].code<100 && pinakas[i].code>999); do{ printf("%d-pos\n",i); scanf("%f",&pinakas[i].pos); }while(pinakas[i].pos<0); do{ //3 error printf("%d-pit\n",i); scanf("%c",&pinakas[i].pit); }while(pinakas[i].pit!='a' && pinakas[i].pit!='b' && pinakas[i].pit!='c'); do{ printf("%d-ap\n",i); scanf("%f",&pinakas[i].ap); }while(pinakas[i].ap<0); } }
GrandGamer Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 Δηλαδή του δίνεις a,b ή c και αυτό ξαναμπαίνει στην επανάληψη;
cyber_katsarida Δημοσ. 12 Ιανουαρίου 2009 Μέλος Δημοσ. 12 Ιανουαρίου 2009 μόλις πάει να μπει στην 3η do. εκει που έχω σημειώσει error και ενω πρέπει να μου εμφανίσει: 0-pit κι εγώ να πληκτρολογίσω το χαρακτήρα μου εμφανίζει: 0-pit 0-pit και περιμένει εισαγωγή. εγώ μια printf έχω βάλει κάτι παίζει με την μεταβλητή τύπου char διότι αν την κάνω int όλα πάνε καλά.
GrandGamer Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 Κάτι παρόμοιο μου έκανε προχθές σε μία άσκηση και εκτύπωνε 2 φορές ενώ εγώ του έλεγα 1. Δοκίμασε να βγάλεις το printf έξω από την επανάληψη, τρέχτω, δες αν το ξανακάνει και αν δεν το κάνει ξαναβάλτο μέσα.
cyber_katsarida Δημοσ. 12 Ιανουαρίου 2009 Μέλος Δημοσ. 12 Ιανουαρίου 2009 αν το βγάλω έξω απο την do όλα καλά.αλλά το κουφό είναι ότι αν η μεταβλητη ήταν int το αρχικό πρόγραμμα θα δούλευε σωστά.
GrandGamer Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 Δεν νομίζω ότι έχει να κάνει με αυτό, κάποιο κόλλημα έχει φάει. Δοκίμασες να την ξαναβάλεις μέσα στην επανάληψη;
cyber_katsarida Δημοσ. 12 Ιανουαρίου 2009 Μέλος Δημοσ. 12 Ιανουαρίου 2009 το δοκίμασα και κάνει πάλι τα ίδια ενώ με int πάει μια χαρά.θα με τρελάνει.
cyber_katsarida Δημοσ. 12 Ιανουαρίου 2009 Μέλος Δημοσ. 12 Ιανουαρίου 2009 δεν έχω δοκιμάσει απλά θα βγάλω την printf έξω από την do while όπως είπες και τελείωσε η υπόθεση. Το θέμα πλέον είναι γιατί να συμβαίνει αυτό.Δε στέκει.
evabb Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 δεν έχω δοκιμάσει απλά θα βγάλω την printf έξω από την do while όπως είπες και τελείωσε η υπόθεση.Το θέμα πλέον είναι γιατί να συμβαίνει αυτό.Δε στέκει. do while= το κανει μια φορα και μετα αν ισχυει η προταση του while το ξανακανει μεχρι να μην ισχυει. βοηθησα;
Lomar Δημοσ. 12 Ιανουαρίου 2009 Δημοσ. 12 Ιανουαρίου 2009 do while= το κανει μια φορα και μετα αν ισχυει η προταση του while το ξανακανει μεχρι να μην ισχυει. βοηθησα; το παληκάρι μια ανάλυση στα τεχνικά με τον garbage collector της c ζήτησε, όχι dummies tutorial μαν η λύση, και τρέχει (copy-paste απο το link που πόσταρε προηγουμένως ο mvaggel). > // ***************************************************************************** // // Ta euxaristo ston mvaggel, k emena me eixe apasxolisei paliotera. // //****************************************************************************** #include<stdio.h> struct pro { int code; float pos; char pit; float ap; }; main() { struct pro pinakas[2]; int i; for(i=0;i<2;i++) { do{ printf("%d-code\n",i); scanf("%d",&pinakas[i].code); getchar(); }while(pinakas[i].code<100 && pinakas[i].code>999); do{ printf("%d-pos\n",i); scanf("%f",&pinakas[i].pos); getchar(); }while(pinakas[i].pos<0); do{ //3 error printf("%d-pit\n",i); scanf(" %c",&pinakas[i].pit); getchar(); }while(pinakas[i].pit!='a' && pinakas[i].pit!='b' && pinakas[i].pit!='c'); do{ printf("%d-ap\n",i); scanf("%f",&pinakas[i].ap); getchar(); }while(pinakas[i].ap<0); } } @mvaggel φίλε μου πολύ καλός ο σύνδεσμος, μέσα σε 3 ποστ αναλύθηκε τόσο απλά το ζήτημα, που στο αντίστοιχο εργαστήριο στη σχολή μου πριν απο 2 περίπου χρόνια, οι καθηγητές το έκαναν να μοιάζει με την απίστευτη τεχνοκρατική λεπτομέρεια.
mvaggel Δημοσ. 13 Ιανουαρίου 2009 Δημοσ. 13 Ιανουαρίου 2009 Τα credit πάνε σε αυτόν που απάντησε στο link. Εγώ απλά googlισα. Όσο για την getchar(), νομίζω έπρεπε να την προσθέσεις πριν την scanf, ώστε να "μαζέψει" το "newline" από την προηγούμενη είσοδο.
afnman Δημοσ. 13 Ιανουαρίου 2009 Δημοσ. 13 Ιανουαρίου 2009 αφησε ενα κενο πριν το %c ....δεν χρειαζεται getchar. στο vs2005 μου επαιξε.
cyber_katsarida Δημοσ. 15 Ιανουαρίου 2009 Μέλος Δημοσ. 15 Ιανουαρίου 2009 ευχαριστώ παιδιά για τις απαντήσεις τελικά βγάλαμε ακρη.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.