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

c++ problem z funkcja (char[])

Ostatnio zmodyfikowano 2014-11-01 16:17
Autor Wiadomość
karlosiak
Temat założony przez niniejszego użytkownika
c++ problem z funkcja (char[])
» 2014-10-31 22:19:52
nie wiem jak zapisac poprawnie aby wlaczylo ta funkcje

C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
#include<cstdlib>
using namespace std;
int m, p = 0, tr;
void wisielec( char str[] ); //problem
int main( int argc, char ** argv ) {
    fstream plik;
    srand( time( NULL ) );
    int n =( rand() % 4 );
    cout << n;
    plik.open( "text.txt" );
    if( plik )
    {
        string linia;
        for( int t = 0; t < n; t++ )
        {
            getline( plik, linia );
        }
        char * cstr = & linia[ 0 ];
        cout << cstr;
        m = linia.size();
        wisielec( cstr[ m ] ); //problem
    }
   
   
    return 0;
}
void wisielec( char str[] ) //problem
{
    char odp[ m ];
    while( p <= 11 )
    {
        char proba;
        cin >> proba;
        if( p < 15 )
        {
            for( int a = 0; a <= m; a++ )
            {
                if( proba == str[ a ] )
                {
                    odp[ a ] = proba;
                    tr++;
                }
                else
                {
                    int b;
                    b++;
                    if( b == m )
                    {
                        p++;
                        cout << "W tym slowie nie ma takiego znaku.";
                    }
                }
                switch( p )
                {
                    // [...]
                }
                if( tr == m )
                {
                    cout << "WIN!!!! twoje slowo to : " << str;
                }
                else if( p == 11 )
                {
                    cout << "lose";
                }
            }
           
        } //problem <-- tu juz wgl nie wiem co mam zle :<
       
    }

Log :

D:\c++\pobieranie x danej z pliku\main.cpp In function 'int main(int, char**)':
25 17 D:\c++\pobieranie x danej z pliku\main.cpp [Error] invalid conversion from 'char' to 'char*' [-fpermissive]
8 6 D:\c++\pobieranie x danej z pliku\main.cpp [Error] initializing argument 1 of 'void wisielec(char*)' [-fpermissive]
D:\c++\pobieranie x danej z pliku\main.cpp In function 'void wisielec(char*)':
184 1 D:\c++\pobieranie x danej z pliku\main.cpp [Error] expected '}' at end of input
28 D:\c++\pobieranie x danej z pliku\Makefile.win recipe for target 'main.o' failed
P-119772
docentpp
» 2014-10-31 22:33:03
Mi sie nie podoba ten fragment !

C/C++
for( int a = 0; a <= m; a++ )
{
    if( proba == str[ a ] )
    {
        odp[ a ] = proba; //// jesli a==m , to jest wyjście poza zakres !!!
        tr++;
    }
    else
    {
        int b;
        b++; ///// zmienna b przyjmuje wartość losową !
        if( b == m )
       
       

P-119775
karlosiak
Temat założony przez niniejszego użytkownika
» 2014-10-31 22:39:29
b poprawilem
int b = 0;

2 bledu nie rozumiem ??
C/C++
odp[ a ] = proba; //// jesli a==m , to jest wyjście poza zakres !!!
przypisuje wartosc <litere> do odpowiedniego miejsca w czystej tablicy ? jesli jestem w błędzie prosze mnie poprawic ?

no i + to nie te bledy ktore szukam :<
P-119777
Atexor
» 2014-11-01 13:00:06
- tworzysz wskaźnik o nazwie cstr wskazujący na zmienną typu char, a następnie do funkcji przekazujesz tablicę cstr
- deklaracje najlepiej robić na początku kodu, a nie w środku odczytywania z pliku jak masz ze string linia
- zmienna linia to string, a następnie przekazujesz adres jej pierwszego elementu jako tablicy & linia[ 0 ]? Kompilator nie wyrzuca błędu, ale osobiście nie spotkałem się czymś takim.
- funkcja wisielec "nie wie" co to jest zmienna m, najlepiej przekazać 2 argumenty do funkcji, tablicę i jej rozmiar
- nie lepiej wywołać funkcję po odczycie wszystkich danych z pliku, zamiast za każdym razem?
- Po co rozmiar stringa linii?
- Brakuje jednej klamry zamykającej "}"funkcję void wisielec (na końcu kodu).
- w przypadku odczytu z plików i zapisu danych do tablicy lepiej korzystać z dynamicznego przydzielania pamięci, bo nie wiesz jak duża będzie twoja tablica: http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307

Tu trochę na szybko zmieniłem Twój kod. Odpala, ale nie wiem czy do końca chodziło o to.

Mam nadzieję, że pomogłem. Pozdrawiam

C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
#include<cstdlib>
using namespace std;
int m = 0, p = 0, t = 0, tr;

void wisielec( string str[], int tf );

int main( int argc, char ** argv ) {
    fstream plik;
    srand( time( NULL ) );
    int n =( rand() % 4 );
    cout << n;
    plik.open( "text.txt" );
   
    string * cstr = new string[ m ];
    string linia;
    if( plik )
    {
       
        getline( plik, linia );
        cstr[ t ] = linia;
        cout << cstr[ t ];
        t++;
       
    }
    m = linia.size(); // ???
    wisielec( cstr, t );
   
    return 0;
}
void wisielec( string str[], int tf )
{
    string * odp = new string[ tf ];
    while( p <= 11 )
    {
        string proba;
        cin >> proba;
        if( p < 15 )
        {
            for( int a = 0; a <= m; a++ )
            {
                if( proba == str[ a ] )
                {
                    odp[ a ] = proba;
                    tr++;
                }
                else
                {
                    int b = 0;
                    b++;
                    if( b == m )
                    {
                        p++;
                        cout << "W tym slowie nie ma takiego znaku.";
                    }
                }
                switch( p )
                {
                    // [...]
                    //case 1:
                    // cout<<"test"<<endl;
                }
                if( tr == m )
                {
                    cout << "WIN!!!! twoje slowo to : " << str;
                }
                else if( p == 11 )
                {
                    cout << "lose";
                }
            }
           
        }
       
    }
}
P-119793
Monika90
» 2014-11-01 16:17:38
- deklaracje najlepiej robić na początku kodu, a nie w środku odczytywania z pliku jak masz ze string linia
A to dlaczego?

- w przypadku odczytu z plików i zapisu danych do tablicy lepiej korzystać z dynamicznego przydzielania pamięci, bo nie wiesz jak duża będzie twoja tablica: http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307
Nie. new i delete to zło, std::vector to piękno i dobro.
P-119808
« 1 »
  Strona 1 z 1