GRY-Online.pl --> Archiwum Forum

Znawcy programowanie POMOCY!!!!!!!!

06.01.2002
18:21
[1]

Pamir [ Generaďż˝ ]

Znawcy programowanie POMOCY!!!!!!!!

Mam 2 pytanka.... 1. Jak zmienic kolor textu c++. 2. - Dlaczego to nie dziala, chodzi mi o kawalek usuwajacy wpis z bazy (ten przy case '2': co jest teraz jako kom....). POmocy jutro mam zaliczenie............


#include <iostream.h>
#include <fstream.h>

//zmienne globalne
//ulatwia to znacznie napisanie
//procedur Load i Save
const int MAX=256; //ile max wpisow w bazie

char autor[MAX][64];
char tytul[MAX][64];
char album[MAX][64];

void Load(void)

int i=0;
ifstream plik;

plik.open("baza.txt");

do ‹

if (plik.fail())

plik.close(); return;


if (!plik.eof())

plik.getline(autor[i], sizeof(autor[i]), '#');
plik.getline(tytul[i], sizeof(tytul[i]), '#');
plik.getline(album[i], sizeof(album[i]), '#');
plik.ignore();
i++;
if (i == MAX) break; //zakoncz while - brak miejsc

› while (!plik.eof()); //az do konca pliku

plik.close();


void Save(void)

int i;
ofstream plik;

plik.open("baza.txt");
for (i=0; i<MAX; i++)
if (autor[i][0] != NULL)

plik << autor[i] << '#'
<< tytul[i] << '#'
<< album[i] << '#' << endl;


plik.close();



void main(void)




int i, z=0;
char cmd[4];
char temp[MAX];

//ustaw jako puste
//zabezpieczenie przez smieciami
//w pamieci RAM
for (i=0; i<MAX; i++)

autor[i][0] = NULL;
tytul[i][0] = NULL;
album[i][0] = NULL;


//wczytaj z dysku istniejaca baze
//jesli nie ma pliku, to pusta baza
Load();

//policz ile zajetych miejsc
for (i=0; i<MAX; i++)
if (autor[i][0] != NULL) z++;

do ‹
cout << "Moje zbiory mp3." << endl
<< "Wolnych wpisow: " << MAX - z << endl << endl
<< "1. Dodaj nowy wpis" << endl
<< "2. Usun istniejacy wpis" << endl
<< "3. Pokaz zawartosc bazy" << endl
<< "0. Koniec pracy" << endl << endl
<< "? ";
cin.get(cmd, sizeof(cmd));
cin.ignore();

switch (cmd[0])

case '1':
//mamy wolne?

if (z != MAX)

//znajdz pierwszy pusty
for (i=0; i<MAX; i++)
if (autor[i][0] == NULL)

cout << "Podaj autora: ";
cin.get(autor[i], sizeof(autor[i]));
cin.ignore();

cout << "Podaj tytul: ";
cin.get(tytul[i], sizeof(tytul[i]));
cin.ignore();

cout << "Podaj nazwe albumu: ";
cin.get(album[i], sizeof(album[i]));
cin.ignore();

z++; //zwieksz liczbe zajetych
break; //przerwij wykonywanie petli for


else

cout << "Brak wolnych wpisow!!!" << endl;

break;

// case '2':
// cout << "Usuwanie - podaj tytul: ";
// cin.get(temp, sizeof(temp));
// cin.ignore();
// for (i=0; i<MAX; i++)
// if (!strcmp(autor[i], temp))
// ‹
// autor[i][0] = NULL;
// tytul[i][0] = NULL;
// album[i][0] = NULL;
z--;
// cout << "Usunieto wpis!" << endl;
// break; //for
// ›
if (i == MAX) cout << "Nie znaleziono takiego wpisu!" << endl;
break;

case '3':
for (i=0; i<MAX; i++)

if (autor[i][0] != NULL)
cout << autor[i] << "\t"
<< tytul[i] << "\t"
<< album[i] << endl;

cout << endl;
break;

case '0':
break;


› while (cmd[0] != '0');

Save();

06.01.2002
22:19
[2]

shard [ Pretorianin ]

nie znam sie za bardzo na uzywaniu cin/cout (ani zmianach kolorow - wiem ze sa stale znaki zmieniajace kolor, na zasadzie q3, ale nie wiem czy to dziala w konsoli dos'owej i nie znam tych znakow - poszukaj na sieci :) co konkretnie nie dziala (poza tym ze nie wrzuciles do komentarza calosci case'a ;)? zawsze wypisuje ze nie znalazl? moze znak koncowy (enter) pobieranego tytulu trzeba wyciac? albo co... zreszta ja bym chyba postawil na numery ID. Przeciez i tak kazdy wpis jest w tablicy, i kazdy ma numer. Wystarczylo by podac numer i tak bys kasowal (to dobry sposob zeby sprawdzic czy powod niedzialania lezy w porownywaniu ciagow znakow). Znacznie szybsze niz porownywanie ciagow znakow wszystkich wpisow (w najgorszym wypadku).

08.01.2002
12:59
[3]

jirian [ Pretorianin ]

cin/cout koloru chyba nie obsluguja, to funkcje strumieniowe, ssproboj zmienic na printf-y a CO dokladnie nie dziala? moze zamiast null wystarczy pustego striga? ('\0' chyba) wstawic......

08.01.2002
14:08
[4]

shard [ Pretorianin ]

NULL to wlasnie zero bedzie. wystarczy "autor[i][0] = 0;"

© 2000-2024 GRY-OnLine S.A.