Podanie i zapis danych w formie menu, polecenie rozdziela cls

0

Witam, jestem dopiero początkujący i na mojej drodze pojawił się spory problem.
Chcę wykonać program, który posiada MENU w takiej o to formie:
MENU:
1 - Wprowadzenie danych
2 - Zapisanie danych na dysku(w notatniku)
3 - Odczyt danych(z notatnika)
4 - Jakiś dodatkowy bajer
5 - Zakończ program

Na chwilę obecną poradziłem sobie z punktem 1, 3, 5. O ile punkt 4 mogę opuścić(brak pomysłu, może Wy coś polecacie?) to punkt 2 jest obowiązkowy. O ile plik się tworzy w podanym miejscu to robi się pusty. Po wykonaniu każdej czynności ekran się czyści, aby było przejrzyściej, czy to wyczyszczenie sprawi, że nie będę mógł zapisać danych?

O to kod programu:

# include <iostream>
# include <stdlib.h>
# include <conio.h>
# include <stdio.h>
#include <string.h>
int main()
{
struct baza 
{
  
char imie[100];
char nazwisko[100];
int wiek;
};
int n, ile;
char wybor;

struct baza katalog[100];
for (; ;)
{
printf ("MENU: \n");
printf ("-----------------------------------\n");
printf ("1 - Wprowadzenie danych\n");
printf ("2 - Zapisanie danych na dysku\n");
printf ("3 - Odczyt danych z dysku\n");
printf ("4 - wymysle cos\n");
printf ("5 - Zakoncz program\n");
wybor=getch();
switch(wybor)
{
case '1':          //WPROWADZENIE DANYCH
{
printf ("\nPodaj liczbe osob aby wypelnic katalog: ");
scanf ("%d",&ile);
for ( n=0; n<ile; n++)
{   
printf ("Podaj imie: ");
scanf ("%s", &katalog[n].imie);
printf ("Podaj nazwisko: ");
scanf ("%s", &katalog[n].nazwisko);
printf ("Podaj wiek: ");
scanf ("%d", &katalog[n].wiek);
}
break;
}
case '2':          // ZAPIS DO PLIKU
{
char baza[100];
FILE *f; 
if ((f=fopen("D:/katalog.txt", "w"))==NULL)
printf("BLAD");
else
{
while (fscanf(f, "%s", n)!=EOF)
printf("%s\n", n);
}
  fclose(f); 
printf ("Dane zostaly zapisane w pliku katalog.txt na dysku D");
break;
}
case '3':         // ODCZYT Z PLIKU
{
char n[100];
FILE *f; 
if ((f=fopen("D:/katalog.txt", "r"))==NULL)
printf("\nBrak pliku, z ktorego mozna odczytac dane");
else
{
printf ("\n");
while (fscanf(f, "%s", n)!=EOF)
printf("%s\n", n);
printf ("\nWczytanie danych wykonane z powodzeniem");
}

fclose(f);               
break;
}
case '4':         // TU COS WYMYSLE
{
printf ("Tu cos wymysle");
break;
}
case '5':         // ZAKONCZENIE PROGRAMU
exit(0);
break;
default:
printf ("Prosze wybrac sposrod numerow dostepnych w MENU!");
break;
}
getch();
system("cls");
}
return 0;
} 
0

Niestety nie rozumiem jak wpisać aby odczytywało dane podane z punktu pierwszego

0

Ty nie wypełniasz struktury tylko kopiujesz tekst z pliku do tablicy char.

0

Wiem, z tego całego programu nie działa mi punkt 2. Czyli aby zapisany wcześniej tekst w punkcie 1 zapisał mi się w pliku z punktu 2(gdzie miedzy nimi jest cls), to muszę wypełnić tę strukturę?

0

po co CI nagłówek iostream skoro piszesz w C? struktura baza lepiej jakby się nazywała osoba. polecam Ci porobić wcięcia i poprawić czytelność, bo nie chce się tego nawet czytać.

0

Zastanów się...
W jaki sposób dostaniesz się np do pola "nazwisko", gdy wszystko będziesz miał w jednej tablicy wymieszane?

0

Rozłączenie tego na 2 "podprogramy" mnie przerosło więc zrobiłem wszystko w 1, i teraz program działa i zapisuje, lecz niestety pojawiają się same cyfry zamiast imienia lub nazwiska, wiek oraz zarobki podane w programie nie zgadzają się z tymi w pliku.

Oto kod programu:

 
# include <stdlib.h>
# include <conio.h>
# include <stdio.h>
#include <string.h>
int main()
{
struct baza 
{
  
char imie[100];
char nazwisko[100];
int wiek;
float zarobki;
};
int n, i, ile;
char wybor;

struct baza katalog[100];
for (; ;)
{
printf ("MENU: \n");
printf ("-----------------------------------\n");
printf ("1 - Wprowadzenie danych i zapisanie ich na dysk\n");
printf ("2 - Odczyt danych z dysku\n");
printf ("3 - wymysle cos\n");
printf ("4 - Zakoncz program\n");
wybor=getch();
switch(wybor)
{
case '1':          //WPROWADZENIE DANYCH
{
printf ("\nPodaj liczbe osob aby wypelnic katalog: ");
scanf ("%d",&ile);
for ( n=0; n<ile; n++)
{   
printf ("Podaj imie: ");
scanf ("%s", &katalog[n].imie);
printf ("Podaj nazwisko: ");
scanf ("%s", &katalog[n].nazwisko);
printf ("Podaj wiek: ");
scanf ("%d", &katalog[n].wiek);
printf ("Podaj zarobki: ");
scanf ("%f", &katalog[n].zarobki);
}
FILE *f;         // ZAPIS NA DYSK
f=fopen("D:/katalog.txt", "w");
for (i=0;i<ile;i++)
fprintf(f, "%s %s %d %f\n", katalog[n].imie, katalog[n].nazwisko, katalog[n].wiek, katalog[n].zarobki);
printf ("\nZapisanie danych wykonane z powodzeniem");
fclose(f);
break;
}
case '2':         // ODCZYT Z PLIKU
{
char n[100];
FILE *f; 
if ((f=fopen("D:/katalog.txt", "r"))==NULL)
printf("\nBrak pliku, z ktorego mozna odczytac dane");
else
{
printf ("\n");
while (fscanf(f, "%s", n)!=EOF)
printf("%s\n", n);
printf ("\nWczytanie danych wykonane z powodzeniem");
}

fclose(f);               
break;
}
case '3':         // TU COS WYMYSLE
{
printf ("Tu cos wymysle");
break;
}
case '4':         // ZAKONCZENIE PROGRAMU
exit(0);
break;
default:
printf ("Prosze wybrac sposrod numerow dostepnych w MENU!");
break;
}
getch();
system("cls");
}
return 0;
}

PS Wybacz karolinaa, ale dla mnie tak pisany program o dziwo jest czytelniejszy. Dzięki za uwagę o iostream:)

EDIT: W drugiej pętli for zamieniłem "i" na "n" i program działa:) Macie może jakiś pomysł co mógłbym umieścić w 3 punkcie? Odkąd zdecydowałem się na połączenie punktu 1 i 2 to ten 3 jest wskazany na dobrą ocenę, a mi brak pomysłu :(

Wielkie dzięki za pomoc, bez Was bym sobie nie poradził!:)

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