Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z plikiem ini (lub) funkcją sprintf

Ostatnio zmodyfikowano 2010-06-04 01:10
Autor Wiadomość
lenrokskate
Temat założony przez niniejszego użytkownika
Problem z plikiem ini (lub) funkcją sprintf
» 2010-06-03 18:28:29
Korzystam z IDE Code::Blocks kompilator GNU GCC. Chcę napisać program w stylu milionerów. Ma on losować numer pytania a potem zamieniać go na char i odczytać pytanie z pliku INI. Kod wygląda tak:

C/C++
#include <iostream>
#include <windows.h>
#include <ctime>
#include <conio.h>

using namespace std;

char cd[ MAX_PATH ]; //sciezka do pliku INI
char wartosc[ 4 ][ 256 ];

char * convITOA( int liczba, char * reserved );

int main()
{
    //pobieramy sciezke
    GetCurrentDirectory( sizeof( cd ), cd );
    strcat( cd, "\\pytania.dat" );
    GetPrivateProfileString( convITOA( 1, 0 ), "a", "Odczytywana_wartość_nie_istnieje!", wartosc[ 0 ], 256, cd );
    GetPrivateProfileString( convITOA( 1, 0 ), "b", "Odczytywana_wartość_nie_istnieje!", wartosc[ 1 ], 256, cd );
    GetPrivateProfileString( convITOA( 1, 0 ), "c", "Odczytywana_wartość_nie_istnieje!", wartosc[ 2 ], 256, cd );
    GetPrivateProfileString( convITOA( 1, 0 ), "d", "Odczytywana_wartość_nie_istnieje!", wartosc[ 3 ], 256, cd );
   
    for( int i = 0; i < 4; i++ ) cout << wartosc[ i ] << endl;
   
    getch();
    return 0;
}

char * convITOA( int liczba, char * reserved = NULL )
{
    if( reserved != NULL ) reserved = NULL;
   
    sprintf( reserved, "%c", liczba );
    return reserved;
}

A plik pytania.dat wygląda tak:
C/C++
[ 1 ]
a = "odp a"
b = "odp b"
c = "odp c"
d = "odp d"
x = b
[ 2 ]
a = "odp2 a"
b = "odp2 b"
c = "odp2 c"
d = "odp2 d"
x = b

A program powinien wyświetlić odp a, odp b...
Kiedy uruchomię go przez C::B przez CTRL+F10 wyświetla litery 'l' a kiedy normalnie 2xLPM z folderu bin/debug to wyświetla jedynki

Dlaczego to nie chce działać?

Czemu to nie działa?
P-17517
szyx_yankez
» 2010-06-03 19:23:21
Odpowiem krótko jak Pan Piotr: bo tak zaprogramowałeś.
P-17521
Elaine
» 2010-06-03 19:35:43
Jeśli podasz nullowy wskaźnik jako pierwszy argument GetPrivateProfileString, to odczyta nazwy istniejących sekcji...

Swoją drogą, co ma robić convITOA()...?
P-17522
lenrokskate
Temat założony przez niniejszego użytkownika
» 2010-06-03 19:40:50
konwersja int to char...
P-17523
lenrokskate
Temat założony przez niniejszego użytkownika
» 2010-06-03 19:46:24
sorry, teraz proszę już o gotowca... niech mi to ktoś napisze bo próbowałem już tysiące sposobów i żaden nie działa
P-17524
DejaVu
» 2010-06-04 01:10:29
Olej na początek interfejs i skup się tylko i wyłącznie na funkcjach do odczytywania danych z pliku (dotyczy to rónież zapisywania danych).

Mając poprawne funkcje do zarządzania danymi będziesz mógł łatwo zakodzić interfejs, a w konsekwencji ukończyć projekt.

/edit:
Przeczytałem sobie kod ;p MSDN prawdę Ci powie:
http://msdn.microsoft.com/en-us/library/ms724353(VS.85).aspx

/edit2:
C/C++
#include <cstdio>
#include <windows.h>

int main()
{
    char wynik[ 256 ];
    GetPrivateProfileString( "2", "c", "<<zonk>>", wynik, sizeof( wynik ), "C:/xxx.ini" );
    printf( "%s\n", wynik );
    return 0;
}
Wynik:
odp2 c

Kowersja int => char* i na odwrót była poruszona na forum kiedyś. Ponadto niniejszy temat nie nawiązuje do konwersji danych, więc nie dostaniesz tu odpowiedzi na to pytanie.

/edit3:
char * convITOA( int liczba, char * reserved );
A jak już piszesz jakąś funkcję, która coś ma robić to polecam ją najpierw testować na boku czy działa, jeżeli nie wiesz czy kod działa dobrze czy nie i nie potrafisz używać debuggera. Dużo szybciej rozwiążesz swoje problemy aniżeli przychodząc na forum z byle pierdołą (no i więcej się nauczysz).
P-17541
« 1 »
  Strona 1 z 1