ошибка во время выполнения при получении ввода структурного объекта - PullRequest
0 голосов
/ 16 марта 2019

первая итерация прошла успешно, но позже невозможно ввести имя. Также я слышал о неиспользовании get, поэтому попробовал и fgets, но он тоже не работал. Пожалуйста, помогите !!

Я работаю в кодовых блоках на языке C ++

struct stu
{
    char n[25];
    int r;
}s[3];

void getinfo()
{
    for(int i=0;i<3;i++)

       {
            cout<<"name: ";
            gets(s[i].n);           
            cout<<"R.no: ";
            cin>>s[i].r;
       }
}

int main()
{
getinfo();

    for(int l=0;l<3;l++)
        {
            cout<<s[l].n;
            cout<<s[l].r;
        }
}

вывод, правильно получая первую итерацию, но в следующий раз не может ввести имя

1 Ответ

0 голосов
/ 17 марта 2019

Примечание:

cin.getline() - используется для чтения неформатированной строки (набора символов) со стандартного устройства ввода.

Оператор извлечения >> не удаляет конецсимвол строки, поэтому если вы смешаете его с getline(), вам нужно будет позвонить cin.ignore(number,'\n');, чтобы избавиться от '\n'

#include <iostream>
#include <limits> 


struct stu
{
    char n[25];
    int r;
}s[3];

void getinfo()
{

    for(int i=0; i<3; i++)
    {
        std::cout << "name: ";
        std::cin.getline(s[i].n,25);


        std::cout << "R.no: ";
        std::cin >> s[i].r;

        std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n');
    }
}

int main()
{
   getinfo();

   std::cout << std::endl;

   for(int l=0; l<3; l++)
   {
        std::cout << s[l].n << "  ";

        std::cout << s[l].r << std::endl;
   }

    return 0;
}

ВЫХОД:

name: Henry the VIII                                                                                                                                                                                                                            
R.no: 1                                                                                                                                                                                                                                         
name: Ronald Regan                                                                                                                                                                                                                              
R.no: 2                                                                                                                                                                                                                                         
name: Adam K.                                                                                                                                                                                                                                   
R.no: 3                                                                                                                                                                                                                                         

Henry the VIII  1                                                                                                                                                                                                                               
Ronald Regan  2                                                                                                                                                                                                                                 
Adam K.  3  
...