2013-10-15 4 views
0

J'écris un code avec un tableau de pointeurs et de structures. code est:Boucle dans un tableau de pointeurs

struct Student_List{ 
    int roll; 
    char name[20]; 
    int mark1; 
    int mark2; 
    int mark3; 
    struct Student_List *next; 
}; 
struct Student_List *Class[] = { NULL };// to generate student's list for various classes. 
struct Student_List *current =NULL; 

struct Student_List * check(int rollNo, int classNo) 
{ 

struct Student_List *temp=NULL; 
temp=Class[classNo]; 

while (temp!=NULL) { 
    if(temp->rollNo == rollNo) 
    { 
     //element is found 
     return temp; 
    } 

    temp = temp->next; 
}  
if(temp==NULL) 
{ 
    //element not found 
    return NULL; 
} 
//scan serially and if found return address of that node 
//if no element found return NULL 

} 

//add elements to list pointed by Class 
struct Student_List * add(char studentName, int rollNo,int classNo) 
{ 
    struct Studen_List *newNode=(struct Student_List *)malloc(sizeof(struct Student_List)); 
if (newNode == NULL) { 
     printf("malloc failed\n"); 
     } 

newNode->roll=rollNo; 
strcpy(newNode->name,studentName); 
newNode->mark1=0; 
newNode->mark2=0; 
newNode->mark3=0; 
struct Student_List *temp = NULL, *previous = NULL; 

temp=Class[classNo]; 
prev = temp; 
} 

if(temp==NULL) 
{ 
    Class[classNo]=newNode; 
    return Class[classNo]; 


} 

while(temp!=NULL) 
{ 
    prev=temp; 
    temp=temp->next; 
} 

prev->next=newNode; 
return newNode; 
//add node to end of the list 
} 

void Delete_List(struct Student_List *temp) 
{ 
delete []temp; 
//temp = NULL; 

/*while(temp!=NULL) 
{ 
    struct Student_List *del=temp; 
    temp=temp->next; 
    free(del); 

}*/ 
} 

int main(); 
{ 
int classNo,rollNo,i; 
char *name; 

printf("\nEnter Class No: "); 
scanf("%d",&classNo); 
printf("\nEnter Name: ") 
gets(name); 
printf("\nEnter Roll No: "); 
scanf("%d",&rollNo); 


current = check(rollNo,classNo); 

if(current == NULL){ 
current = add(name,rollNo,classNo); 
} 
// others is the marks data fetched from file and calculations. 
// this code is enough to reproduce my error. 

for(int i=0;i<10;i++) 
{ 
    Delete_List(Class[i]); 
} 
    return; 
} 

Problème: Quand je spécifier des valeurs et réaliser des calculs de, les résultats étaient mauvais. Au débogage, j'ai trouvé que mon adresse de départ Class[3] est la même que Class[1]->nextRoll->nextRoll;

Je n'arrive pas à le supprimer. S'il vous plaît aidez-moi à enlever la boucle. toute aide avec la syntaxe ou les suggestions sont les bienvenues.

+3

Le code ne compile pas, n'a même pas la "boucle" dont vous avez besoin d'aide pour supprimer. Vous voulez que nous vous aidions avec un code sans rapport avec votre problème? En voici un: 'int main() {}', celui-ci fonctionne. – DanielKO

+3

Il sera utile de nous montrer comment vous initialisez et utilisez 'Class'. – Thanushan

+3

Est-ce C++ ou C? Choisissez seulement un. – user694733

Répondre

2

Vous ne devez pas utiliser malloc, utilisez new:

struct Student_List{ 
    int roll; 
    char name[20]; 
    int mark1; 
    int mark2; 
    int mark 3; 
    Student_List *nextRoll; 
}; 

Student_List * Class[] = { NULL }; 

int main(); 
{ 
    // various initializations 

    // for each new student, do this 
    Student_List *newNode=new Student_List; 
    newNode->next = Class[0]; // 0 is the Class of the student 
    Class[0] = newNode; 

    // code to fetch data from text file and perform calculations. 

    // do not delete Class; !! 
} 

Notez que votre approche est erronée, vous devez utiliser la STL, autant que possible. Exemple:

struct Student { 
    int roll; 
    std::string name; 
    int mark1; 
    int mark2; 
    int mark3; 
}; 

typedef std::list<Student> Class; 

typedef std::map< std::string, Class > Classes; 
Classes classes; 

int main() 
{ 
    Student s; 
    s.name = "Daniel"; 
    // ... 

    classes[ "1b" ].push_back(s); // Add student to a class "1b". 
} 
+0

Merci pour votre aide. et je sais que STL sera plus utile, mais malheureusement, je ne le sais pas. Bien que j'avais commencé à l'apprendre, mais en raison de certaines limites, je dois compléter ce code comme suggéré par la personne précédente travaillant dessus. – Ikhurana