Wczytywanie i wypisywanie string do struct

0

Mam kod:

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

struct osoba
{
    string imie;
    int numer;
};

int main()
{
    int n;
    scanf("%d", &n);

    struct osoba uczestnicy[n];
    for(int i = 0; i < n; i++)
    {
        scanf("%s", uczestnicy[i].imie);
        scanf("%d", &uczestnicy[i].numer);
    }
    for(int i = 0; i < n; i++)
    {
        printf("%s ", uczestnicy[i].imie);
        printf("%d", uczestnicy[i].numer);
        printf("\n");
    }

    return 0;
}

Dostaję komunikaty:
In function 'int main()':
error: cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string<char>}' through '...'
warning: format '%s' expects argument of type 'char*', but argument 2 has type 'std::string {aka std::basic_string<char>}' [-Wformat]
error: cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string<char>}' through '...'
warning: format '%s' expects argument of type 'char*', but argument 2 has type 'std::string {aka std::basic_string<char>}' [-Wformat]
Kompilacja niepowodzenie: 2 błędów, 2 ostrzeżeń (0 min, 0 sek)

W jaki sposób mogę wczytać napis (ma mieć do 10 znaków) do structa i jak mogę go potem wypisać (nie używając cin i cout), żeby działało jak najszybciej.

2

Zdecyduj się czy chcesz pisać w C czy w C++, bo na razie napisałeś kod, który nie jest poprawny w ani jednym, ani drugim.

    int n;
    scanf("%d", &n);

    struct osoba uczestnicy[n];

C++ nie ma VLA, C nie ma iostreamów, string ani namespace'ów.

Jak chcesz wczytywać do stringa to użycie scanf jest proszeniem się o kłopoty.

0
kq napisał(a):

Zdecyduj się czy chcesz pisać w C czy w C++, bo na razie napisałeś kod, który nie jest poprawny w ani jednym, ani drugim.

    int n;
    scanf("%d", &n);

    struct osoba uczestnicy[n];

C++ nie ma VLA, C nie ma iostreamów, string ani namespace'ów.

Jak chcesz wczytywać do stringa to użycie scanf jest proszeniem się o kłopoty.

Jestem początkujący, robię zadanie do main2 i wyskakuje mi Przekroczenie czasu, a wcześniej pomagało zamienienie cin/cout na scanf/printf, dlatego próbuję zrobić to i tym razem. Kurs dotyczy c++, więc w tym języku ma być kod.
"Jak chcesz wczytywać do stringa to użycie scanf jest proszeniem się o kłopoty." - więc czego innego mogę użyć, bo znam na razie tylko scanf i cin(a to działa trochę wolniej)?

1

To użyj cin i na początku dodaj:

cout.sync_with_stdio(false);
cin.tie(nullptr);

1 użytkowników online, w tym zalogowanych: 0, gości: 1