Konwersja int do const char* - problem

0

Witam! Piszę sobie taką ala bazę danych w konsoli. Chcę dodać wyszukiwanie wolnego ID. Przeszukuję for'em czy już taki plik istnieje, jeżeli nie to ID = licznik pętli. Nie mogę dokonać konwersji int na const char*, który jest potrzebny w funckji strcpy(..) Prototyp tego o co mi chodzi:

int add()
{
    char temp[256], ID[256], path[256];
    fstream plik;
    
    system("CLS");
    cout << "===== Dodawania wpisu =====" << endl << endl;
    for (int i = 0; i > 0; i++)
    {
        fstream test_file;
        
        strcpy(path, "Data\\");
        strcat(path, i);  //tutaj próbowałem char(i) i String(i), ale nic ;/
        strcat(path, ".emdb");
        test_file.open(path, ios::in);
        if (plik) continue;
        if (!plik) ID = char(i); //to samo tutaj nie mogę skonwertować i są błędy...
    }
    strcpy(path, "Data\\");
    strcat(path, ID);
    strcat(path, ".emdb");
    plik.open(path, ios::in);
    cout << "Wpisz imie i nazwisko:" << endl;
    cin.getline(temp, sizeof(temp));
    plik << temp << endl;
    cout << "Dodano wpis! Otrzymane ID: " << ID << endl;
}

Pragnę dodać, że szukałem w podonych topicach, ale dalej nie mogę sobie poradzić. Proszę o pomoc.

0

Ale jak chcesz skonwertować int do const char*? Łańcuch znaków i liczba to zupełnie inne typy danych i nie podlegają prostej konwersji.

Zamiast tego użyj funkcji itoa - http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
-> strcat(path, itoa(i));

0

OK, ale na cplusplus.com deklaracja posiada 3 parametry, a nie 1. Pierwszy to int do konwersji, drugi właśnie nie wiem o co z nim chodzi - jakaś tablica w pamięci, której jest przekazywany ciąg (o co kaman?), a trzeci to to system konwersji. No to o co chodzi z tym drugim parametrem char* ? Czy może chodzi o to, że sama funkcja nie wywala wartości tylko wklepuje do zmiennej tak?

0

Piszesz w C++, więc zamiast się bawić archaicznymi tablicami char użyj po prostu std::string i po problemie - std::stringstream użyjesz do konwersji liczby na jej reprezentację tekstową. ;)
Jeżeli już się tym bawisz, to może najpierw doucz się o co w ogóle chodzi z ręcznym zarządzaniem pamięcią, tablicami i wskaźnikami, bo skoro pytasz "o co kaman?" przy itoa, to znaczy, że kompletnie nie masz pojęcia o podstawach C.

0

Dobra, może dziwnie to zabrzmiało "o co kaman" xD Ale jakoś zamulam dzisiaj i już wiem o co chodzi. Problem teraz mam jeszcze jeden haha po wywołaniu funkcji add() od razu ją wykonuje i z powrotem przechodzi do main, ale dlaczego? Kod:

int add()
{
    char temp[256], path[256];
    char *ID;
    fstream plik;
    
    system("CLS");
    cout << "===== Dodawania wpisu =====" << endl << endl;
    for (int i = 0; i > 0; i++)
    {
        fstream test_file;
        char *licznik;
        
        itoa(i, licznik, 10);
        strcpy(path, "Data\\");
        strcat(path, licznik);
        strcat(path, ".emdb");
        test_file.open(path, ios::in);
        if (plik) continue;
        if (!plik) 
        {
            ID = licznik;
            break;
        }
    }
    strcpy(path, "Data\\");
    strcat(path, ID);
    strcat(path, ".emdb");
    plik.open(path, ios::in);
    cout << "Wpisz imie i nazwisko:" << endl;
    cin.getline(temp, sizeof(temp));
    plik << temp << endl;
    cout << "Dodano wpis! Otrzymane ID: " << ID << endl;
}

//kawałek main:
if (akcja == 1) 
    {
        add();
        goto main_menu;
    }

Help!

0

Wiem z czym był problem dopóki nie dałem system("PAUSE"); Nie chodzi o goto main_menu, lecz o to, że cin.getline nie działa. Po prostu jakby ignoruje go i leci następną linijkę kodu. A jeszcze jedno program się crashuje po tym jak wywołam

cout << "Dodano wpis! Otrzymane ID: " << ID << endl << endl;

i Program przestał działać ;/ Prosiłbym o pomoc.

0

char *licznik;
itoa(i, licznik, 10);

Dam Ci radę, napisz to lepiej za pomocą stringów.

0

No postaram się, a do tych charów się przyzwyczaiłem, bo string w C++ a w Delphi to co innego. Tam zawsze wszystko chulało jak pamiętam a tu... I dlatego się przerzuciłem na chary, ktore też nie są za bardzo. Dobra, ale jak przy użyciu stringów ;p użyć cin.getline jak parametr pierwszy to typ char_type*? Czy to nie koliduje ze sobą?

0

Jakie są funkcje konwertujące char->string i na odwrót, bo mnie zaraz coś strzeli. 'licznik' już jest w string, ale strcat nie przyjmuje stringa ;/ No i jak teraz przekonwertować licznik pętli 'i' do stringa albo chara no już nic nie wiem. W BCB dałbym IntToStr, ale strcat też by odrzucił bo to potrzebny const char*.

0

Hehe, uporałem się z problemem, mam nadzieje, że reszta pójdzie już bez problemów (choć nie na tym programowanie polega ;p) Co do getline, faktycznie, użyłem cin.ignore i teraz działa. Dzięki wszystkim. :)

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