Czy wyrażenia należy oddzielać średnikami?

0

Dlaczego nie chce zapisywać do pliku i wywala błąd ?

#include <iostream>
#include <fstream>
using namespace std;

struct zamieszkanie {
    string ulica;
    string miasto;
    string kod;
};

struct osoba {
    string imie;
    string nazwisko;
    int wiek;
    zamieszkanie x;
};

int main()
{

    cout << "=====================\n"
         << "BAZA DANYCH\n"
         << "=====================\n";
    int stala;
    cout << "podaj ilosc ucznow: ";
    cin >> stala;
    osoba tab[stala];
    for (int i = 0; i < stala; i++) {
        cout << "\nuczen numer " << i + 1;
        cout << "\npodaj imie: ";
        cin.clear();
        cin.sync();
        getline(cin, tab[i].imie);
        cout << "\npodaj nazwisko: ";
        cin.clear();
        cin.sync();
        getline(cin, tab[i].nazwisko);
        cout << "podaj wiek \n";
        cin >> tab[i].wiek;
        cout << "podaj miasto: \n";
        cin.clear();
        cin.sync();
        getline(cin, tab[i].x.miasto);
        cout << "podaj ulice: \n";
        cin.clear();
        cin.sync();
        getline(cin, tab[i].x.ulica);
        cout << "podaj kod: \n";
        cin.clear();
        cin.sync();
        getline(cin, tab[i].x.kod);

        cout << "\n-----------------------------------------------------------------------------\n";

        cout << "podano nastepujace dane: " << tab[i].nazwisko << "\nwiek: \n" << tab[i].wiek << "\nmiasto:\n" << tab[i].x.miasto << "\nulica:\n"
             << tab[i].x.ulica << "\nkod:\n" << tab[i].x.kod << "\nimie:\n" << tab[i].imie;

        fstream plik;
        plik.open("C:/Users/zs4/Desktop/bazadanych.txt", ios::out);

        for (int v = 0; v < 4; v++) {
            plik << tab[i].imie
                        plik
                 << tab[i].nazwisko;
            plik << tab[i].wiek;
        }
        plik.close();
    }

    return 0;
}


2

https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

Nie jesteśmy od zgadywania co to za błąd.

Po sformatowaniu kodu jak człowiek widać brak średnika:

            plik << tab[i].imie
                        plik
                 << tab[i].nazwisko;
            plik << tab[i].wiek;
0

Nawet po dodaniu średnika nic to nie zmienia. Program dalej nie zapisuje do danych do pliku

0

Pokaż kod, który nie działa i który się kompiluje. Dałeś kod z błędem kompilacji i to zostało zdiagnozowane.

2

Nie wiem czy to zamierzone czy nie ale w pętli z v nadal używasz zmiennej i:

for (int v = 0; v < 4; v++)
{
	plik << tab[i].imie;
	plik << tab[i].nazwisko;
	plik << tab[i].wiek;
}
1
for (int i = 0; i < stala; i++)
{
  cout << "\nuczen numer " << i + 1;
  cout << "\npodaj imie: ";
  cin.clear();
  cin.sync();
  getline(cin, tab[i].imie);
  cout << "\npodaj nazwisko: ";
  cin.clear();
  cin.sync();
  getline(cin, tab[i].nazwisko);
  cout << "podaj wiek \n";
  cin >> tab[i].wiek;
  cout << "podaj miasto: \n";
  cin.clear();
  cin.sync();
  getline(cin, tab[i].x.miasto);
  cout << "podaj ulice: \n";
  cin.clear();
  cin.sync();
  getline(cin, tab[i].x.ulica);
  cout << "podaj kod: \n";
  cin.clear();
  cin.sync();
  getline(cin, tab[i].x.kod);

Nie przesadzasz troszkę? Wydziel powtarzające się fragmenty, tak aby uprościć i skrócić całość:

for (int i = 0; i < stala; i++)
{
  cout << "uczen numer " << i + 1 << ":\n";
  
  tab[i].imie     = getUserString("podaj imie: ");
  tab[i].nazwisko = getUserString("podaj nazwisko: ");
  tab[i].wiek     = getUserInt("podaj wiek: ");
  
  tab[i].x.miasto = getUserString("podaj miasto: ");
  tab[i].x.ulica  = getUserString("podaj ulice: ");
  tab[i].x.kod    = getUserString("podaj kod: ");

Takie coś wygląda o wiele lepiej, do tego daje się wielokrotnie używać. Oczywiście funkcje getUserString i getUserInt należy sobie zdefiniować, ale to pozostawiam Tobie. ;)

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