Η σελίδα μας αναβαθμίστηκε, γι' αυτό τον λόγο τα μέλη μας θα πρέπει να ζητήσουν νέο κωδικό πρόσβασης από την υπηρεσία "Αποστολή κωδικού πρόσβασης".
Εάν το email με τον νέο κωδικό δεν έρθει στο inbox κοιτάξτε και στο spam folder. Ο server είναι φρέσκος και δεν έχει το reputation που του αξίζει.

Προβλημα με συναρτηση διαγραφής!

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
Filby
Δημοσιεύσεις: 6
Εγγραφή: 28 Μαρ 2010 11:36

Προβλημα με συναρτηση διαγραφής!

Δημοσίευση από Filby » 09 Μάιος 2010 20:18

Καλησπερα! εχω αναλαβει ενα προγραμμα όπου σε συνδεδεμενη λιστα και structs βαζουμε στοιχεια μαθητων. Το προγραμμα ζηταει επίσης τη διαγραφη οπιου μέλους θελουμε με βαση το id του.παραθέτω τοκ κωδικα διαγραφης

Κώδικας: Επιλογή όλων

void diagrafi(classNodeType **list, int *k) {

    classNodeType *temp;
    classNodeType *prev;
    printf("Parakalw eisagete to id pros diagrafi : \n");
    scanf("%d",k);
    prev=NULL;
    temp=*list;
    temp->next=(*list)->next;
    while (temp!=NULL && temp->aStudent->idNumber==*k) {
        
        printf("Diagrafete o mathitis me id %d\n", temp->aStudent->idNumber);
        prev=temp;
        temp=temp->next;

}
     if (temp==NULL  ||  temp->aStudent->idNumber!=*k ) {
         printf ("%d was not found\n", *k);
           return;
    }
    if (prev==NULL)
    *list=(*list)->next;
    else
    prev->next=temp->next;
    free(temp);

    return;
}


τα structs ειναι της μορφης

Κώδικας: Επιλογή όλων

typedef struct{
    float firstAssignment;
    float secondAssignment;
    float midterm;
    float final;
    float finalMark;
} studentRecordType;


typedef struct{
    char * firstName;
    char * lastName;
    int idNumber;

    studentRecordType * marks;
} studentType;

struct classNodeStruct{
    studentType *aStudent;
    classNodeStruct *next;
};
typedef struct classNodeStruct classNodeType;

Η διαγραφή δεν δουλευει σωστά και διαγράφει μόνο για id=1. ευχαριστω εκ των προτέρων!
(P.S. Το pointer se pointer λειτουργει κανονικα πιστευω καθως το εχω χρησιμοποιεισει και σε αλλη συναρτηση και δουλευε!)

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

Προβλημα με συναρτηση διαγραφής!

Δημοσίευση από Erevis » 10 Μάιος 2010 16:49

Κώδικας: Επιλογή όλων

    
while (temp!=NULL && temp->aStudent->idNumber==*k) {        
        printf("Diagrafete o mathitis me id %d\n", temp->aStudent->idNumber);
        prev=temp;
        temp=temp->next;
}
το 2ο expression temp->aStudent->idNumber==*k επιστρέφει false με το που βρει κόμβο που έχει διαφορετικό ID από αυτόν που ψάχνεις. Εσύ θες να κάνεις το ακριβώς αντίθετο, να διατρέχεις τη λίστα όσο το ΙD είναι διαφορετικό κι όταν είναι ίδιο να σταματήσεις, ώστε να τον διαγράψεις και να συνδέσεις τους previous και next κόμβους.

Filby
Δημοσιεύσεις: 6
Εγγραφή: 28 Μαρ 2010 11:36

Προβλημα με συναρτηση διαγραφής!

Δημοσίευση από Filby » 13 Μάιος 2010 00:34

ευχαριστω πολύ για την απαντηση σ ! το προβημα λυθηκε

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες