saavedra29 Δημοσ. 2 Ιανουαρίου 2010 Δημοσ. 2 Ιανουαρίου 2010 Γεια σας παιδιά και καλή χρονιά να έχετε! Προσπαθώ να κάνω μιά άσκηση στο βιβλίο ''C προγραμματισμός" και έχω κολήσει. Ο κώδικας που γράφω είναι αυτός: >/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/ #include <stdio.h> int main() { int old , new , rest , cou = 1; char cod; while ( cou <= 3 ) { printf ( "εισήγαγε κωδικό:" ); scanf ( "%s\n" , &cod); printf ( "εισήγαγε υπόλοιπο:" ); scanf ( "%d\n" , &rest ); printf ( "εισήγαγε παλιό πιστ. όριο:" ); scanf ( "%d\n" , &old ); old/=2; printf ( "το νέο πιστ. όριο είναι %d\n" , old ); if ( old < rest ) printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod ); cou++; } return 0; } Όταν λοιπόν τρέχω το πρόγραμμα και εισάγω τον κωδικό μετά με βγάζει σε μία κενή γραμμή όπου πρέπει να πληκτρολογίσω ένα νούμερο για να συνεχίσει.Πληκτρολογώ το νούμερο και... να το αποτέλεσμα: >aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17 εισήγαγε κωδικό:1218 23 εισήγαγε υπόλοιπο:1700 εισήγαγε παλιό πιστ. όριο:2000 το νέο πιστ. όριο είναι 850 εισήγαγε κωδικό: To 23 στην τρίτη σειρά είναι τυχαίο, για να συνεχίσει το πρόγραμμα. Αντί για να διαιρέσει με το 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο. Τί λάθος κάνω;
karabouzouk... Δημοσ. 2 Ιανουαρίου 2010 Δημοσ. 2 Ιανουαρίου 2010 το "scanf ( "%s\n" , &cod);" πρέπει να γίνει scanf ( "%s" , cod); χωρίς το & δηλαδή γιατι διαβάζεις συμβολοσειρά και να αλλάξεις το char cod; σε char cod[megethos kwdikou]; για να είναι συμβολοσειρά και όχι χαρακτήρας όπως το είχες δηλώσει.
saavedra29 Δημοσ. 2 Ιανουαρίου 2010 Μέλος Δημοσ. 2 Ιανουαρίου 2010 karabouzouk έκανα αυτό που είπες αλλά δεν είχε αποτέλεσμα. Άλλαξα όμως τον κώδικα έτσι: >/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/ #include <stdio.h> int main() { int old , new , rest , cou = 1; char cod; while ( cou <= 3 ) { printf ( "εισήγαγε κωδικό:" ); scanf ( "%c" , &cod); printf ( "εισήγαγε υπόλοιπο:" ); scanf ( "%d\n" , &rest ); printf ( "εισήγαγε παλιό πιστ. όριο:" ); scanf ( "%d\n" , &old ); old/=2; printf ( "το νέο πιστ. όριο είναι %d\n" , old ); if ( old < rest ) printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod ); cou++; } return 0; } και εξαφανίστηκε εκείνη η άσχετη γραμμή όπου έπρεπε να εισάγω κάτι. Το πρόβλημα όμως που αντι να διαιρέσει με 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο παραμένει: >aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17 εισήγαγε κωδικό:1218 εισήγαγε υπόλοιπο:1700 εισήγαγε παλιό πιστ. όριο:2000 το νέο πιστ. όριο είναι 850 εισήγαγε κωδικό:εισήγαγε υπόλοιπο: ---------- Το μήνυμα προστέθηκε στις 13:11 ---------- karabouzouk έκανα αυτό που είπες αλλά δεν είχε αποτέλεσμα.Άλλαξα όμως τον κώδικα έτσι: >/*υπολογισμός νέου πιστωτικού υπολοίπου πελάτη και αν αυτό ξεπερνάει το νέο πιστωτικό όριο.*/ #include <stdio.h> int main() { int old , new , rest , cou = 1; char cod; while ( cou <= 3 ) { printf ( "εισήγαγε κωδικό:" ); scanf ( "%c" , &cod); printf ( "εισήγαγε υπόλοιπο:" ); scanf ( "%d\n" , &rest ); printf ( "εισήγαγε παλιό πιστ. όριο:" ); scanf ( "%d\n" , &old ); old/=2; printf ( "το νέο πιστ. όριο είναι %d\n" , old ); if ( old < rest ) printf ( "το υπόλοιπο του πελάτη %d είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod ); cou++; } return 0; } και εξαφανίστηκε εκείνη η άσχετη γραμμή όπου έπρεπε να εισάγω κάτι. Το πρόβλημα όμως που αντι να διαιρέσει με 2 το παλιό πιστ. όριο διαιρεί το υπόλοιπο παραμένει: >aris@saavedra29:~/προγράμματα c/mine/4th chapter$ ./pro4-17 εισήγαγε κωδικό:1218 εισήγαγε υπόλοιπο:1700 εισήγαγε παλιό πιστ. όριο:2000 το νέο πιστ. όριο είναι 850 εισήγαγε κωδικό:εισήγαγε υπόλοιπο: μπα, λάθος είναι πάλι.
bab1s Δημοσ. 2 Ιανουαρίου 2010 Δημοσ. 2 Ιανουαρίου 2010 Δοκίμασε να βγάλεις και τα υπόλοιπα '\n' από τα επόμενα scanf. Θα είναι ΟΚ!
saavedra29 Δημοσ. 2 Ιανουαρίου 2010 Μέλος Δημοσ. 2 Ιανουαρίου 2010 τελικά τα κατάφερα! Ο τελικός κώδικας ειναι: >int main() { int old , new , rest , cou = 1; char cod[4]; while ( cou <= 3 ) { printf ( "εισήγαγε κωδικό:" ); scanf ( "%s" , cod); printf ( "εισήγαγε υπόλοιπο:" ); scanf ( "%d" , &rest ); printf ( "εισήγαγε παλιό πιστ. όριο:" ); scanf ( "%d" , &old ); old/=2; printf ( "το νέο πιστ. όριο είναι %d\n" , old ); if ( old < rest ) printf ( "το υπόλοιπο του πελάτη %s είναι μεγαλύτερο από το νέο πιστωτικό όριο\n" , cod ); cou++; } return 0; } Αν είναι δυνατόν, τόσα προγραμματάκια αυτού του τύπου έχω γράψει και είχα ξεχάσει ότι μετά από scanf αλλάζει μόνο του γραμμή
Evgenios1 Δημοσ. 3 Ιανουαρίου 2010 Δημοσ. 3 Ιανουαρίου 2010 Τσεκαρε αυτο, το πρωτο και το δευτερο πινακα
greatst Δημοσ. 3 Ιανουαρίου 2010 Δημοσ. 3 Ιανουαρίου 2010 Τσεκαρε αυτο, το πρωτο και το δευτερο πινακα Σωστός ο Ευγένιος! Τo http://www.cplusplus.com έχει ένα από τα απλούστερα tutorials στο internet!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.