vagg77 Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 Παιδια εχω ενα θεμα με μια ασκηση.Για να μην την γραφω,εχω επισυναψει την εκφωνηση της.Το θεμα μου εμφανιζεται στην γραμμη 46,οπου πρεπει να διαβασω τι μου δινει ο χρηστης και αναλογως,να τερματιζω το προγραμμα η να συνεχιζω.Εμενα ομως οταν το εκτελω με παει κατευθευειαν στην γραμμη 14 και δεν σκαναρει καθολου την επιλογη μου αν θελω να συνεχισω η οχι.Συγνωμη αλλα το προγραμμα δυσκολευομαι να το βαλω σε <>code γιατι δεν μου λειτουργει οποτε αυτος μπορει να το κανεις καποιος απο κατω.Ουτε ξερω πως να χρησιμοποιω goto.Επισης,εχω επισυναψει και το εκτελεσιμο στο οποιο ΔΕΝ ΠΑΤΗΣΑ ουτε Υ ουτε τπτ μονο του πηγε εκει Ευχαριστω #include <stdio.h> int main() { int n=100,i=1,typos,xronia,paidia,prospatheies=1,atoma=1; float misthos,telikosmisthos,epidoma; char sinexeia; while (i <= n) { if (((typos>3) || (typos<1)) && (prospatheies<3)) { prospatheies=prospatheies + 1; printf("Lathos typos\n"); } 14 printf("Dwste to typo tou ergazomenou\n"); scanf("%d\n",&typos); printf("Dwste ta xronia ergasias sas\n"); scanf("%d\n",&xronia); printf("Posa paidia exete\n"); scanf("%d\n",&paidia); if (typos == 1) misthos=600; if (typos == 2) misthos=800; if (typos == 3) misthos=1000; if (xronia <= 5) misthos=misthos; else if (xronia <= 15) misthos=misthos + misthos*0.05; else misthos=misthos + misthos*0.1; if (paidia == 0){ epidoma=0;} else if (paidia <= 2){ epidoma=misthos*0.05;} else{ epidoma=misthos*0.1;} telikosmisthos=misthos + epidoma; printf("Teliko poso misthodosias : %2.f\n",telikosmisthos); printf("Poso epidomatos gia ta paidia : %2.f\n",epidoma); printf("Atoma pou prospelastikan : %d\n",atoma); printf("An thelete na sinexisete,patiste Y alliws patiste 0\n"); scanf("%c/n",&sinexeia); 46 if ((sinexeia == 'Y') || (sinexeia == 'y')) { scanf("%d\n",&typos); atoma=atoma + 1; i=i + 1; } if (sinexeia == '0') { printf("System will terminate\n"); system("pause"); return 0; } } if ((prospatheies==3) && ((typos>3) || (typos<0))) { printf("Dwsate 3 fores lathos typo.To programma tha termatistei\n"); system ("pause"); return 0; } }
cyberrobot Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 Μήπως να έκανες ένα strncmp() για τις 2 επιλογές σου; http://www.cplusplus.com/reference/cstring/strncmp/
imitheos Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 Παιδια εχω ενα θεμα με μια ασκηση.Για να μην την γραφω,εχω επισυναψει την εκφωνηση της.Το θεμα μου εμφανιζεται στην γραμμη 46,οπου πρεπει να διαβασω τι μου δινει ο χρηστης και αναλογως,να τερματιζω το προγραμμα η να συνεχιζω.Εμενα ομως οταν το εκτελω με παει κατευθευειαν στην γραμμη 14 και δεν σκαναρει καθολου την επιλογη μου αν θελω να συνεχισω η οχι.Συγνωμη αλλα το προγραμμα δυσκολευομαι να το βαλω σε <>code γιατι δεν μου λειτουργει οποτε αυτος μπορει να το κανεις καποιος απο κατω.Ουτε ξερω πως να χρησιμοποιω goto.Επισης,εχω επισυναψει και το εκτελεσιμο στο οποιο ΔΕΝ ΠΑΤΗΣΑ ουτε Υ ουτε τπτ μονο του πηγε εκει Ευχαριστω printf("An thelete na sinexisete,patiste Y alliws patiste 0\n"); scanf("%c/n",&sinexeia); [color=#ff0000]46 if ((sinexeia == 'Y') || (sinexeia == 'y'))[/color] [color=#ff0000] {[/color] [color=#ff0000] scanf("%d\n",&typos);[/color] [color=#ff0000] atoma=atoma + 1;[/color] [color=#ff0000] i=i + 1;[/color] [color=#ff0000] }[/color] if (sinexeia == '0') { printf("System will terminate\n"); system("pause"); return 0; } Όταν δίνεις παραπάνω είσοδο από ό,τι περιμένει η scanf, τότε αυτή μένει στο buffer και την βλέπουν μετέπειτα κλήσεις της. Για αυτό δεν σε ρωτάει και ξανατρέχει το βρόχο. Αν βάλεις μια εντολή να τυπώνει την sinexeia το πιο πιθανό είναι να πάρεις τον αριθμό 10 ή 13 (λόγω του enter που πατάς στην scanf). Το "%c/n" πρέπει να γίνει "%c\n" όπως το έχεις και πιο πάνω και θα σου παίξει όπως και στα άλλα. Το "\n" στο scanf δεν είναι και τόσο καλό γιατί δεν κάνει αυτό που θες παντού. Μια πιο καλή λύση είναι να τρέχει η getchar μετά από κάθε scanf ώστε να τρώει την παραπανίσια είσοδο. Επίσης αντί για system-pause μπορείς να τρέξεις και εκεί getchar γιατί η system-pause παίζει μόνο σε windows.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα