2010-07-07 6 views
0

La logique du programme est tout à fait clair, mais quand il demande à l'utilisateur d'entrer le nom. La deuxième fois, il demande le nom i.e. à i = 1, il demande le nom et demande également l'année à saisir. En bref, il ne permet pas à l'utilisateur d'entrer des données après i = 0 en année int.programme donnant erreur

/* Write a program to take input name roll number and year of joining of 5 students and making a function which prints name of only those who have joined in the particular year mentioned by the user*/ 
#include<stdio.h> 
#include<conio.h> 
struct student 
{ 
    char name[50]; 
    int year; 

} 
a[5]; 

void func (void); 
void main (void) 
{ 
    int i; 
    for (i = 0; i < 5; i++) 
    { 
     printf ("Enter name %d\n", i + 1); 
     gets (a[i].name); 
     puts ("Enter year"); 

     scanf ("%d", &a[i].year); 
    } 
    func(); 
    getch(); 
} 
void func (void) 
{ 
    int i; 
    int yearr; 
    printf ("Enter a year:"); 
    scanf ("%d", &yearr); 
    for (i = 0; i < 5; i++) 
    { 
     if (yearr == a[i].year) 
     { 
     printf ("%s", a[i].name); 
     }// if ends 

    }//for ends 
}// func ends 

Répondre

1

Effacer le tampon d'entrée avant de prendre l'entrée à l'aide fflush(stdin) ou fflushall(). Votre code modifié est donné ci-dessous.

/* Write a program to take input name roll number and year of joining of 5 students and making a function which prints name of only those who have joined in the particular year mentioned by the user*/ 
    #include<stdio.h> 
    #include<conio.h> 
    struct student 
    { 
     char name[50]; 
     int year; 

    } 
    a[5]; 

    void func (void); 
    void main (void) 
    { 
     int i; 
     for (i = 0; i < 5; i++) 
     { 
      printf ("Enter name %d\n", i + 1); 
      fflush(stdin); 
      gets (a[i].name); 
      puts ("Enter year"); 

      scanf ("%d", &a[i].year); 
     } 
     func(); 
     getch(); 
    } 
    void func (void) 
    { 
     int i; 
     int yearr; 
     printf ("Enter a year:"); 
     scanf ("%d", &yearr); 
     for (i = 0; i < 5; i++) 
     { 
      if (yearr == a[i].year) 
      { 
      printf ("%s", a[i].name); 
      }// if ends 

     }//for ends 
    }// func ends 
+0

Désolé, Mon programme a quelques erreurs. Merci de ne pas utiliser fflush (stdin). Voir http://www.drpaulcarter.com/cs/common-c-errors.php pour plus d'informations. – chanchal1987

3

Mis à part la mauvaise odeur de code de gets (USE fgets S'IL VOUS PLAÎT maintenant, alors que vous RE en apprentissage DROIT dE MAL.), et la hideosity de votre sortie (A \n ici et là ferait des merveilles), il semble que cela pourrait fonctionner. En supposant ce que vous voulez pour obtenir 5 noms et années de l'utilisateur, puis demander un an pour chercher, et la liste des noms de tous les élèves dont correspondront aux années. (Si ce n'est pas ce que vous voulez, la logique est même pas loin d'être aussi clair que vous pensez qu'il est.)

Personnellement, je ne serais pas mixe scanf et fgets (Oui, je l'ai dit fgets. Utiliser.) , donc je ne suis pas sûr des problèmes à le faire. Je ne suis pas fan de scanf de toute façon, donc je peut être biaisée.

+1

Oui, jamais, jamais utiliser gets(). – JeremyP

Questions connexes