2014-05-11 1 views
0

Je pratiquais la structure de la structure. J'ai fait le programme suivant et il n'y avait aucune erreur de compilation. Mais quand j'essaye de l'exécuter (je suppose que ces erreurs sont appelées des erreurs d'exécution?), Il cesse de fonctionner juste après avoir accepté le numéro de rôle. Je me demande quel mal j'ai fait. J'utilise les compilateurs Dev C++ et gcc. Voici le code:Console C Le programme a cessé de fonctionner dev C++

#include<stdio.h> 




struct student{ 
char Fname[]; 
char Lname[]; 
int reg_no; 
int Class; 
char sec; 
}; 

void enterinfo(student *,int); 
void Display(student *,int); 

int main() 
{ 
int i; 

printf("\t\t\t Enter student's information\n\n\n\n"); 
printf("How many students are there in you're school: "); 
scanf("%d",&i); 
student ob[i],*ptr; 
ptr=ob; 
enterinfo(ptr,i); 
Display(ptr,i); 

} 




void enterinfo(student *e,int y) 
{ 
    char CONT='y'; 


     for (int j=0;j<y && (CONT=='y' || CONT=='Y');j++) 
     { 
      printf("Enter Students First Name: "); 
      scanf("%s",e->Fname); 
      printf("Enter Students Last Name: "); 
      scanf("%s",e->Lname); 
      printf("Enter Roll number: "); 
      scanf("%d",e->reg_no); 
      printf("Enter class: "); 
      scanf("%d",e->Class); 
      printf("Enter Section: "); 
      scanf("%d",e->sec); 

      printf("\n\n\n\n Do you want to enter more? : "); 
      scanf("%c",&CONT); 

     } 

} 






void Display(student *e,int y) 
{ 
    char CONT='y'; 


     for (int j=0;j<y;j++) 
     { 
      printf("Students name : %s %s",e->Fname,e->Lname); 

      printf("Enter Roll number: %d",e->reg_no); 

      printf("class: %d",e->Class); 

      printf("Enter Section: %d",e->sec); 

     } 

} 
+2

'... cessé de fonctionner' est un mauvais titre. – alk

+1

'char Fname []; char Lname [];': besoin de taille. ou remplacer le pointeur et l'allocation dynamique. – BLUEPIXY

+1

Pourquoi vous utilisez la balise 'c' quand vous avez des trobles avec' C++'? –

Répondre

1

J'ai apporté les modifications suivantes à votre code et il a commencé à travailler pour moi:

  • char Fname[]; ->char Fname[100];
  • char Lname[]; ->char Lname[100];
  • char sec; ->int sec; Ceci est nécessaire pour scanf.
  • scanf("%d",e->reg_no); ->scanf("%d",&e->reg_no);
  • scanf("%d",e->Class); ->scanf("%d",&e->Class);
  • scanf("%d",e->sec); ->scanf("%d",&e->sec);
  • ajoutant \n à la fin de printf cordes dans Display

S'il vous plaît noter que scanf("%s", ...) est précaire et il peut provoquer un plantage la chaîne d'entrée est plus longue que la taille du tableau que vous lisez, c'est-à-dire si l'utilisateur tape un nom d'au moins 1 00 octets.

Veuillez noter que vous devez toujours vérifier la valeur de retour de scanf et annuler prématurément en cas d'erreur (c'est-à-dire si cela ne renvoie pas 1 dans votre cas).

Veuillez noter qu'en C++ les méthodes istream (http://en.cppreference.com/w/cpp/header/istream) fournissent un moyen plus sûr de lire l'entrée.

+0

Merci .. j'ai oublié thos '&' s! Mais la boucle ne fonctionne toujours pas correctement. :( – Smatik

0

ici:

scanf("%d",e->reg_no); 

vous devez insérer un symbole '&' avant e> reg_no. Mais je vois bien d'autres problèmes une fois que vous résoudre ce ...

0

Vous pouvez utiliser le code ci-dessous, il fonctionnera sur les deux fenêtres Linux &. Votre programme se termine en raison de:

 


    scanf("%d",&e->reg_no); 
    printf("Enter class: "); 
    scanf("%d",&e->Class); 
    printf("Enter Section: "); 
    scanf("%d",&e->sec); 

 

vous ne pas utiliser & qui est indispensable pour int, char, types de données float car il est utilisé comme référence de la variable.

 


    #include 


    struct student{ 
    char Fname[30]; 
    char Lname[30]; 
    int reg_no; 
    int Class; 
    char sec[5]; 
    }; 

    void enterinfo(student *,int); 
    void Display(student *,int); 

    int main() 
    { 
    int i; 

    printf("\t\t\t Enter student's information\n\n\n\n"); 
    printf("How many students are there in you're school: "); 
    scanf("%d",&i); 
    student * ob = new student[i]; 
    enterinfo(ob,i); 
    Display(ob,i); 

    } 




    void enterinfo(student *e,int y) 
    { 
     char CONT='y'; 


      for (int j=0;jFname); 
       printf("Enter Students Last Name: "); 
       scanf("%s",e->Lname); 
       printf("Enter Roll number: "); 
       scanf("%d",&e->reg_no); 
       printf("Enter class: "); 
       scanf("%d",&e->Class); 
       printf("Enter Section: "); 
       scanf("%s",e->sec); 

       getchar();//to eat newline/ enter char of previous statement 

       printf("\n\n\n\n Do you want to enter more? : "); 
       scanf("%c",&CONT); 

      } 

    } 






    void Display(student *e,int y) 
    { 
      for (int j=0;jFname,e->Lname); 

       printf("\nEnter Roll number: %d",e->reg_no); 

       printf("\nclass: %d",e->Class); 

       printf("\nEnter Section: %s\n",e->sec); 

      } 

    } 

 
Questions connexes