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

2 zmienne obok siebie wyciągane z pliku

Ostatnio zmodyfikowano 2015-11-12 22:46
Autor Wiadomość
piechcia
Temat założony przez niniejszego użytkownika
2 zmienne obok siebie wyciągane z pliku
» 2015-11-07 11:39:59
<am problem przez któy nie moge pracować dalej.
Problem z liczbami wyciąganymi z pliku to była błachostka w porównaniu do tego.
Otóż docelowy wykląd zmiennej jest taki.

2K - Dwójka Karo.
kP - król Pik
9T - Dzewiątka trefl

etc.
Jak to dodać te zmienne K,P,T by były odczytywane ale nie miały wpływu na sume?

Obecnie mój zapis programu wygląda tak

C/C++
system( "pause" );
system( "cls" );

fstream plik;
plik.open( "Gracz 1.txt", ios::in );
plik >> liczba;
plik >> liczba2;
plik >> liczba3;
plik >> liczba4;
plik >> liczba5;

cout << "Karty gracza nr 1\n\n";

if( liczba == 1 ) cout << "Jedynka\n";

if( liczba == 2 ) cout << "Dwojka\n";

if( liczba == 3 ) cout << "Trojka\n";

if( liczba == 4 ) cout << "Czworka\n";

if( liczba == 5 ) cout << "Piatka\n";

if( liczba == 6 ) cout << "Szostka\n";

if( liczba == 7 ) cout << "Siodemka\n";

if( liczba == 8 ) cout << "Osemka\n";

if( liczba == 9 ) cout << "Dziewiatka\n";

if( liczba == 10 ) cout << "Dziesiatka\n";

if( liczba2 == 1 ) cout << "Jedynka\n";

if( liczba2 == 2 ) cout << "Dwojka\n";

if( liczba2 == 3 ) cout << "Trojka\n";

if( liczba2 == 4 ) cout << "Czworka\n";

if( liczba2 == 5 ) cout << "Piatka\n";

if( liczba2 == 6 ) cout << "Szostka\n";

if( liczba2 == 7 ) cout << "Siodemka\n";

if( liczba2 == 8 ) cout << "Osemka\n";

if( liczba2 == 9 ) cout << "Dziewiatka\n";

if( liczba2 == 10 ) cout << "Dziesiatka\n";

if( liczba3 == 1 ) cout << "Jedynka\n";

if( liczba3 == 2 ) cout << "Dwojka\n";

if( liczba3 == 3 ) cout << "Trojka\n";

if( liczba3 == 4 ) cout << "Czworka\n";

if( liczba3 == 5 ) cout << "Piatka\n";

if( liczba3 == 6 ) cout << "Szostka\n";

if( liczba3 == 7 ) cout << "Siodemka\n";

if( liczba3 == 8 ) cout << "Osemka\n";

if( liczba3 == 9 ) cout << "Dziewiatka\n";

if( liczba3 == 10 ) cout << "Dziesiatka\n";

if( liczba4 == 1 ) cout << "Jedynka\n";

if( liczba4 == 2 ) cout << "Dwojka\n";

if( liczba4 == 3 ) cout << "Trojka\n";

if( liczba4 == 4 ) cout << "Czworka\n";

if( liczba4 == 5 ) cout << "Piatka\n";

if( liczba4 == 6 ) cout << "Szostka\n";

if( liczba4 == 7 ) cout << "Siodemka\n";

if( liczba4 == 8 ) cout << "Osemka\n";

if( liczba4 == 9 ) cout << "Dziewiatka\n";

if( liczba4 == 10 ) cout << "Dziesiatka\n";

if( liczba5 == 1 ) cout << "Jedynka\n";

if( liczba5 == 2 ) cout << "Dwojka\n";

if( liczba5 == 3 ) cout << "Trojka\n";

if( liczba5 == 4 ) cout << "Czworka\n";

if( liczba5 == 5 ) cout << "Piatka\n";

if( liczba5 == 6 ) cout << "Szostka\n";

if( liczba5 == 7 ) cout << "Siodemka\n";

if( liczba5 == 8 ) cout << "Osemka\n";

if( liczba5 == 9 ) cout << "Dziewiatka\n";

if( liczba5 == 10 ) cout << "Dziesiatka\n";

system( "pause" );
system( "cls" );


cout << "Suma\n";
cout << liczba + liczba2 + liczba3 + liczba4 + liczba5;

}

Pozdrawiam
P-139735
j23
» 2015-11-07 12:54:45
Uprośćmy nieco:
C/C++
const char * num_str[] =
{
    nullptr,
    "Jedynka",
    "Dwojka",
    "Trojka",
    "Czworka",
    "Piatka",
    "Szostka",
    "Siodemka",
    "Osemka",
    "Dziewiatka",
    "Dziesiatka"
};

...

cout << num_str[ liczba ] << '\n';
cout << num_str[ liczba2 ] << '\n';
cout << num_str[ liczba3 ] << '\n';
cout << num_str[ liczba4 ] << '\n';
cout << num_str[ liczba5 ] << '\n';
Znacznie czytelniej, nie sądzisz?


Co do pytania. Karty w formie 2K czy 9T możesz rozbić na liczbę i kolor np. tak:
C/C++
string s;

...

plik >> s;

if( isdigit( s[ 0 ] ) )
{
    int n;
    char c;
   
    if( sscanf( s.c_str(), "%i%c", & n, & c ) == 2 )
    {
        cout << "liczba: " << n << '\n';
        cout << "kolor: " << c << '\n';
    }
    else { /* błąd!!! */ }
}
else
{
    /* tu asy i inne nieliczbowe */
}

P.S. walidację wprowadzanych danych oczywiście pominąłem. To już twoja działka.
P-139741
piechcia
Temat założony przez niniejszego użytkownika
» 2015-11-08 17:16:37
nie do końca rozumiem cp dalej zrobić.
Mógł byś mimo że na nie idealnym moim projekcie pomóc mi to wykonać bo w c++ jestem noga
P-139820
j23
» 2015-11-08 18:29:21
Przecież w drugim kodzie pokazałem Ci, jak wyciągnąć liczbę i kolor z danej tekstowej. Dostosuj to sobie do swojego kodu i wtedy ewentualnie pytaj, czego konkretnie nie rozumiesz. Za Ciebie programu pisać nie będę.
P-139821
piechcia
Temat założony przez niniejszego użytkownika
» 2015-11-09 00:22:49
chce ten kod dostosować to mojego pierwotnego bo mimo jego archaiczności go rozumiem.
Z czasem będe się dokształcać i modyfikować kody ale puki co chciałbym dokończyć ten program na danych które już podałem i nie wiem co gdzie wpisać.
Wiem że to nie ładne prosić człowieka o wyręczenie ale jak byś mógł mi chociaż pokazać jak przypisać literze K Wartość 11 i dodać do niej kolor np KP - król Pik to jestem twoim dłużnikiem
P-139832
j23
» 2015-11-09 10:21:50
C/C++
int n;
char c;

if( isdigit( s[ 0 ] ) )
{
    if( sscanf( s.c_str(), "%i%c", & n, & c ) != 2 ) { /* błąd!!! */ }
}
else
{
    switch( s[ 0 ] )
    {
    case 'W': n = 11; break;
    case 'D': n = 12; break;
    case 'K': n = 13; break;
    case 'A': n = 14; break;
       
    default: n = - 1; /* błąd */
    };
   
    c = s[ 1 ];
}

cout << "karta nr. " << n << " kolor: " << c << '\n';
P-139838
piechcia
Temat założony przez niniejszego użytkownika
» 2015-11-12 22:46:43
Jeszcze raz musiałem napisać ten program i do szedłem do takiej postaci.
Pojawiły sie trzy problemy.
zmienna karta z liczbami chce sie tylko skompilować przy stringu a przy incie wywala bład.
nawet jak program sie skompiluje to wszystkie karty są w lini a nie w kolumnie.
Przy próbie zmiany nazwy koloru z P na Pik wywala taki błąd
C/C++
[ code src = "C++" ]
35 17 C:\U sers\Piechu\Downloads\kurs_cpp_odc7( 1 ) \k urs_cpp_odc7\02 zapis dopisuj do pliku\zapis_dopisuj.cpp[ Error ] could not convert 'kolor.std::basic_string<_CharT, _Traits, _Alloc>::operator=<char, std::char_traits<char>, std::allocator<char> >(119)' from 'std::basic_string<char>' to 'bool'
[ \c ode ]

[ code src = "C++" ]
#include <iostream>
#include <fstream>

using namespace std;

string kolor;
string karta;
string linia;
int nr_linii = 1;



int main( int argc, char * argv[] ) {
    {
       
        fstream plik;
        plik.open( "kartaa.txt", ios::in );
       
       
        if( plik.good() == false ) cout << "Nie mozna otworzyc pliku!";
       
        while( getline( plik, linia ) )
        {
            switch( nr_linii )
            {
            case 1: karta = linia;
            case 2: kolor = linia;
               
            }
            nr_linii++;
        }
       
        plik.close();
       
        if( kolor = 'P' ) cout << "Pik";
       
        cout << karta;
        cout << kolor;
       
       
        ; plik.close();
       
        return 0;
    }
}
[ \c ode ]

mam nadzieje ż e zrozumiecie o co mi chodzi i pomo ż ecie
P-140052
« 1 »
  Strona 1 z 1