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();
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).
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......
shard [ Pretorianin ]
NULL to wlasnie zero bedzie. wystarczy "autor[i][0] = 0;"