ge0rge007 Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Γειά σας παιδιά! Έχω να κάνω μια άσκηση στην C και δεν ξέρω γιατί αλλα κολλάει,αν μπορείτε σας παρακαλώ να βοηθήσετε.Κολλάει στο σημείο που δίνω την μεταβητή χ και απο όσο είδα το πρόβλημα το κάνει η σύγκριση του χ στην IF. Η άσκηση είναι: #include <stdio.h> #include <string.h> int main(){ int meg; meg=3; int i,thl[meg],x,flag,metritis; char onoma[meg]; //eisagogh ton dedomenon for (i=0;i<=meg;i++) { printf ("dwste to onoma\n"); scanf ("%s",&onoma); printf ("dwste ton arithmo tou thlefonou\n"); scanf ("%d",&thl); } //zhtaei ton arithmo thlefonoy printf ("\ndoste ton arithmo thlefonoy"); scanf ("%d",&x); flag=0; i=0; do{ if(x==thl){ //oups ,to dior8wsa printf ("\no arithmos thlefonoy antistoixei ston %s\n",onoma); flag=1; } i++; }while (flag==0&&i<meg); system("pause"); return 0; }
antonl Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Το debug του μπακάλη. Δε βάζεις να κάνει printf καμιά μεταβλητή μέσα στο while να δεις τι γίνεται;
ge0rge007 Δημοσ. 18 Νοεμβρίου 2008 Μέλος Δημοσ. 18 Νοεμβρίου 2008 Φίλε είπα ότι το πρόβλημα εμφανίζεται πρίν την while στην if...Λες να μην το δοκίμαζα?
antonl Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Ή δεν κατάλαβα τι είπες ή δε με κατάλαβες εσύ. Είπα: "Δε βάζεις να κάνει printf καμιά μεταβλητή μέσα στο while (ΣΣ: loop - Ξεκινάει από το "do", τελειώνει στο "while" και περιλαμβάνει το if clause)". > do{ printf("%i\n",i); if(x==meg){ printf ("\no arithmos thlefonoy antistoixei ston %s\n",onoma[i]); flag=1; } i++; }while (flag==0&&i<meg); Το παραπάνω δε σου δίνει τίποτα σαν output;
clairvoyant Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Καλά τον τελευταίο καιρό έχω σκουριάσει και οι παρατηρήσεις μου μπορεί να είναι άστοχες, αλλά whatever.. 1ον απορώ πως κάνει compilie αυτό το πράγμα, το meg θα έπρεπε να είναι const ή defined.. (memory leak) 2ον έχεις memory leak και στο σημείο for (i=0;i<=meg;i++) θα έπρεπε να είναι i<meg 3ον δεν μας λες τι ακριβώς πρέπει να κάνει το πρόγραμμα, υποθέτω διατηρείς μια λίστα με αριθμούς τηλεφώνων και ονόματα και μετά ψάχνεις κάτι σε αυτή τη λίστα.. ο έλεγχος if (x==meg) όμως δεν έχει κάποιο νόημα..
ge0rge007 Δημοσ. 18 Νοεμβρίου 2008 Μέλος Δημοσ. 18 Νοεμβρίου 2008 Βασικά ναι, δεν το είπα εγώ σωστά...Δές τι δοκίμασα: αρχικά διέγραψα οτιδίποτε βρίσκεται μετά το printf ("\ndoste ton arithmo thlefonoy"); scanf ("%d",&x); flag=0; i=0; και το πρόγραμμα τερμάτιζε κανονικά. Mετά έβαλα την if αμέσως μετά απο τον παραπάνω κώδικα και το πρόβλημα ξαναεμφανήστηκε,εντομεταξύ τα δεδομένα που έβαζα ήταν τέτοια ώστε να μπεί στην if για να εμφανήσει την printf και να δώ αν δουλεύει. -----Προστέθηκε 18/11/2008 στις 06 : 00 : 55----- Καλά τον τελευταίο καιρό έχω σκουριάσει και οι παρατηρήσεις μου μπορεί να είναι άστοχες, αλλά whatever.. 1ον απορώ πως κάνει compilie αυτό το πράγμα, το meg θα έπρεπε να είναι const ή defined.. (memory leak) 2ον έχεις memory leak και στο σημείο for (i=0;i<=meg;i++) θα έπρεπε να είναι i<meg 3ον δεν μας λες τι ακριβώς πρέπει να κάνει το πρόγραμμα, υποθέτω διατηρείς μια λίστα με αριθμούς τηλεφώνων και ονόματα και μετά ψάχνεις κάτι σε αυτή τη λίστα.. ο έλεγχος if (x==meg) όμως δεν έχει κάποιο νόημα.. Να γίνει πρόγραμμα που: 1 Θα ζητάει και θα εισάγει τα ονόματα και τηλέφωνα 30 φοιτητών σε κατάλληλους πίνακες. 2 Θα δέχεται το τηλέφωνο του χρήστη και θα το αναζητάει στον πίνακα των τηλεφώνων, αν το τηλέφωνο υπάρχει θα σταματάει την αναζήτηση και θα εμφανίζει το όνομα του κατόχου του αλλιώς`θα εμφανίζει μήνυμα`ότι το όνομα δεν υπάρχει στον κατάλογο
clairvoyant Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Κοίτα κανονικά δεν επιτρέπονται οι λύσεις στο forum, ενημερωτικά θα σου πω όμως ότι ο λόγος που σκάει το πρόγραμμα σου είναι τα memory leaks. Καταρχήν είπαμε, θα κάνεις το meg #define ή const. Κατά δεύτερον, το char onoma[meg] είναι λάθος γιατί έτσι για κάθε όνομα μπορείς να αποθηκεύεις ένα μόνο χαρακτήρα (γι'αυτό σκάει όταν πας να εκτυπώσεις το onoma.. γιατί στο array αυτό έχει γίνει show). Θες έναν πίνακα από πίνακες, ή έστω κάτι της μορφής char onomata[meg][256]; (κάνεις μια σύμβαση ότι κάθε όνομα θα περιέχει το πολύ 256 χαρακτήρες ας πούμε, εναλλακτικά θα πρέπει να χρησιμοποιήσεις char *onomata[meg]). Και τέλος, καλύτερα να κάνεις τον έλεγχο για το αν υπάρχει το τηλέφωνο με ένα απλό for loop αντί για do..while
ge0rge007 Δημοσ. 18 Νοεμβρίου 2008 Μέλος Δημοσ. 18 Νοεμβρίου 2008 Συγνώμη δεν το ήξερα ότι δεν επιτρέπονται απαντήσεις... Σε ευχαριστώ πάντως για την βοήθεια σου,πάω να κάνω τις αλλαγές που μου είπες! Και πάλι ευχαριστώ:->
antonl Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 [σφήνα] Η λύση ασκήσεων νομίζω ότι δεν επιτρέπεται. Για το debug έχω την εντύπωση ότι δεν υπάρχει πρόβλημα. [/σφήνα]
clairvoyant Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Συγνώμη δεν το ήξερα ότι δεν επιτρέπονται απαντήσεις...Σε ευχαριστώ πάντως για την βοήθεια σου,πάω να κάνω τις αλλαγές που μου είπες! Και πάλι ευχαριστώ:-> Πάλεψε το και αν έχεις πρόβλημα εδώ είμαστε
miza Δημοσ. 18 Νοεμβρίου 2008 Δημοσ. 18 Νοεμβρίου 2008 Πληροφοριακά οι λύσεις ασκήσεων επιτρέπονται το έχει πει moderator σε άλλο thread
lepass_7 Δημοσ. 20 Νοεμβρίου 2008 Δημοσ. 20 Νοεμβρίου 2008 Τι λετε ρε παιδια; Σας ελέγχει το Υπουργείο Παιδείας αν δώσετε λύσεις; Σιγά forum είναι...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.