Προς το περιεχόμενο

Πρόβλημα με άσκηση C???


ge0rge007

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας παιδιά!

Έχω να κάνω μια άσκηση στην 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;

}

Δημοσ.

Ή δεν κατάλαβα τι είπες ή δε με κατάλαβες εσύ. Είπα:

"Δε βάζεις να κάνει 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;

Δημοσ.

Καλά τον τελευταίο καιρό έχω σκουριάσει και οι παρατηρήσεις μου μπορεί να είναι άστοχες, αλλά whatever..

1ον απορώ πως κάνει compilie αυτό το πράγμα, το meg θα έπρεπε να είναι const ή defined.. (memory leak)

2ον έχεις memory leak και στο σημείο for (i=0;i<=meg;i++) θα έπρεπε να είναι i<meg

3ον δεν μας λες τι ακριβώς πρέπει να κάνει το πρόγραμμα, υποθέτω διατηρείς μια λίστα με αριθμούς τηλεφώνων και ονόματα και μετά ψάχνεις κάτι σε αυτή τη λίστα.. ο έλεγχος if (x==meg) όμως δεν έχει κάποιο νόημα..

Δημοσ.

Βασικά ναι, δεν το είπα εγώ σωστά...Δές τι δοκίμασα:

αρχικά διέγραψα οτιδίποτε βρίσκεται μετά το

 

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 Θα δέχεται το τηλέφωνο του χρήστη και θα το αναζητάει στον πίνακα των

τηλεφώνων, αν το τηλέφωνο υπάρχει θα σταματάει την αναζήτηση και θα εμφανίζει

το όνομα του κατόχου του αλλιώς`θα εμφανίζει μήνυμα`ότι το όνομα δεν υπάρχει

στον κατάλογο

Δημοσ.

Κοίτα κανονικά δεν επιτρέπονται οι λύσεις στο forum, ενημερωτικά θα σου πω όμως ότι ο λόγος που σκάει το πρόγραμμα σου είναι τα memory leaks.

 

Καταρχήν είπαμε, θα κάνεις το meg #define ή const.

Κατά δεύτερον, το char onoma[meg] είναι λάθος γιατί έτσι για κάθε όνομα μπορείς να αποθηκεύεις ένα μόνο χαρακτήρα (γι'αυτό σκάει όταν πας να εκτυπώσεις το onoma.. γιατί στο array αυτό έχει γίνει show). Θες έναν πίνακα από πίνακες, ή έστω κάτι της μορφής char onomata[meg][256]; (κάνεις μια σύμβαση ότι κάθε όνομα θα περιέχει το πολύ 256 χαρακτήρες ας πούμε, εναλλακτικά θα πρέπει να χρησιμοποιήσεις char *onomata[meg]).

Και τέλος, καλύτερα να κάνεις τον έλεγχο για το αν υπάρχει το τηλέφωνο με ένα απλό for loop αντί για do..while

Δημοσ.

Συγνώμη δεν το ήξερα ότι δεν επιτρέπονται απαντήσεις...

Σε ευχαριστώ πάντως για την βοήθεια σου,πάω να κάνω τις αλλαγές που μου είπες!

Και πάλι ευχαριστώ:->

Δημοσ.

[σφήνα]

Η λύση ασκήσεων νομίζω ότι δεν επιτρέπεται. Για το debug έχω την εντύπωση ότι δεν υπάρχει πρόβλημα.

[/σφήνα]

Δημοσ.
Συγνώμη δεν το ήξερα ότι δεν επιτρέπονται απαντήσεις...

Σε ευχαριστώ πάντως για την βοήθεια σου,πάω να κάνω τις αλλαγές που μου είπες!

Και πάλι ευχαριστώ:->

Πάλεψε το και αν έχεις πρόβλημα εδώ είμαστε :-)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...