программа дает ошибку - PullRequest
0 голосов
/ 07 июля 2010

Логика программы вполне понятна, но когда она просит пользователя ввести имя. Во второй раз он запрашивает имя, т. Е. При i = 1, он запрашивает имя, а также просит ввести год. Короче говоря, пользователь не может вводить данные после i = 0 в течение года.

/* 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

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

Кроме вонючих кодов gets (ИСПОЛЬЗУЙТЕ fgets. ПОЖАЛУЙСТА. СЕЙЧАС, КОГДА ВЫ ВСЕ ЕЩЕ УЧИТЕ ПРЯМО ОТ НЕПРАВИЛЬНОГО)чудеса), похоже, это может сработать.Предполагая, что вы хотите получить 5 имен и лет от пользователя, попросите указать год для поиска и перечислите имена всех учеников, чьи годы совпадают.(Если это не то, что вы хотите, логика даже не так ясна, как вы думаете.)

Лично я бы не смешивал scanf и fgets (Да, я сказалfgets. ИСПОЛЬЗУЙТЕ ЭТО.), Поэтому я не уверен в проблемах с этим.Во всяком случае, я не фанат scanf, поэтому я могу быть предвзятым.

1 голос
/ 19 июля 2010

Очистить входной буфер, прежде чем принимать входные данные, используя fflush(stdin) или fflushall(). Ваш модифицированный код указан ниже.

/* 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
1 голос
/ 07 июля 2010

Я думаю, что ваша проблема связана с этим вопросом: Ввод в C. Scanf до получения. Проблема.

Попытка:

scanf("%d\n", &yearr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...