2016-05-26 5 views
1
#include <iostream> 

using namespace std; 

int main() 
{ 
    int N; 
    int T; 
    cin>>N; 
    struct key { 
     std::string namek; 
     int szam; 
     int szat; 
     std::string kol; 
    }; 

    key kert[N]; 
    for (int i=0; i<N; i++) {  
     int k=i; 
     cin.ignore(100, ' '); 
     getline(cin, kert[k].namek); 
     cin>>kert[k].szam; 
     cin.ignore(100,' '); 
     cin>>kert[k].szat; 
     cin.ignore(100, ' '); 
     getline(cin, kert[i].kol); 
    } 
    for (int i=0; i<N; i++) { 
     int k=i; 
     cout<<kert[i].namek; 
    } 

Я хочу прочитать в структуре 'kert', но моя программа только читает в kert [0], а затем возвращается. Я не знаю, где я испортился, потому что я использовал getline для строк и cin для ints. Я знаю, что cin оставляет «\ n» в буфере и пробовал читать фиктивные символы после cin, я также пробовал cin.ignore (как в коде), но ничего не помогает. Где я испортил?C++ getline и cin reading

+0

Вы игнорируете пробелы, а не новые строки. 'key kert [N];' массивы переменной длины не поддерживаются в стандартном C++ (AFAIK) и что вы добавляете 4 в 'N' в свой первый цикл? –

+0

@bkVnet Поддерживается длина массива переменных. – pingul

+0

@pingul как расширение GCC, да – Rakete1111

ответ

1

Я немного поиграл и изменил игнорирование, позволил мне вывести все имена в kert. Теперь игнорирует поиск символа конечной линии и вызывается только для противодействия cin's.

#include <iostream> 

using namespace std; 

int main() 
{ 
    int N; 
    cin>>N; 
    struct key { 
     std::string namek; 
     int szam; 
     int szat; 
     std::string kol; 
    }; 

    key kert[N]; 
    cin.ignore(100, '\n'); 
    for (int i=0; i<N; i++) {  
     getline(cin, kert[i].namek); 
     cin>>kert[i].szam; 
     cin>>kert[i].szat; 
     cin.ignore(100, '\n'); 
     getline(cin, kert[i].kol); 
    } 
    for (int i=0; i<N; i++) { 
     cout<<endl<<kert[i].namek<<endl; 
    } 
    return 0; 
} 
+0

Большое спасибо, я застрял с этим за 6 часов, и это отлично очищает – trolbtrobl

Смежные вопросы