Łączenie dwóch liczb z tablicy w jedną.

Odpowiedz Nowy wątek
Padre nowicjusz
2017-09-29 21:02
Padre nowicjusz
0

Witam.

piszę aktualnie program który odczytuje dane z pliku txt i zapisuje je w strukturach.

Nie mogę sobie poradzić z problemem dotyczącym łączeniem pojedynczych cyfr.

punkty[0] = 1
punkty[1] = 4

jak zrobić z tego jedną zmienną o wartości 14 zawodnicy[i].rzuty


#include <stdio.h>
#include <stdlib.h>
#define ROZMIAR 4
#define maxzn 30
#define maxpkt 3
void zeruj_strukt(struct druzyna *zawodnicy);
long zapisz_imie(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch);
long zapisz_nazwisko(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch);
long zapisz_punkty(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch);

struct druzyna {                              // szablon struktury
    int numer;
    char imie[maxzn];
    char nazwisko[maxzn];
    int rzuty;
    int trafienia;
    int asysty;
    int faule;
};

int main(void)
{
    struct druzyna zawodnicy[ROZMIAR];
    zeruj_strukt(zawodnicy);                    // zerowanie tablic
    FILE *pd;
    char ch;
    long rozmiar_pl, licznik;                           // long dla bajtów w plikach txt
    int i;

    if ((pd = fopen("druzyna.txt", "r")) == NULL)              // tylko do odczytu
    {
        fprintf(stdin, "Nie moge otworzyc pliku.\n");
        exit(EXIT_FAILURE);
    }

    fseek(pd, 0L, SEEK_END);                    //szukamy konca pliku aby wyznaczyc jego wielkosc
    rozmiar_pl = ftell(pd);                      //bajty
    fseek(pd, 0L, SEEK_SET);
    licznik = 0L;

    for (i = 0; i < ROZMIAR; i++)            // zawodnicy z pliku txt
    {
            fseek(pd, 0L, SEEK_CUR);                    //
            ch = getc(pd);
            zawodnicy[i].numer = ch;
            fseek(pd, 1L, SEEK_CUR);
            licznik++;
            licznik = zapisz_imie(zawodnicy, i, pd, licznik, ch);

            licznik = zapisz_punkty(zawodnicy, i, pd, licznik, ch);    
                                      // tu się zaciąłem.
    }
    putchar('\n');
    fclose(pd);
    return 0;
}

void zeruj_strukt(struct druzyna *zawodnicy)
{
    int i, j;

    for(i = 0; i < ROZMIAR; i++)
        for (j = 0; j < maxzn; j++)
        {
            zawodnicy[i].imie[j] = '\0';
            zawodnicy[i].nazwisko[j] = '\0';
        }
}

long zapisz_imie(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch)
{
    int j;

    licznik++;

        for (j = 0; j < maxzn; j++)
        {           
            ch = getc(pd);
            if (ch != ' ')
            zawodnicy[i].imie[j] = ch;
            fseek(pd, 0L, SEEK_CUR);
            licznik++;      
            if (isblank(ch))
                break;
        }
        fseek(pd, 0L, SEEK_CUR);
        licznik = zapisz_nazwisko(zawodnicy, i, pd, licznik, ch);
        return licznik;
}

long zapisz_nazwisko(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch)
{
    {
        int j;

        licznik++;
        zawodnicy[i].nazwisko[0] = ch;   // pozbycie się 'spacji'
        for (j = 0; j < maxzn; j++)
        {
            ch = getc(pd);
            if (ch != ' ')
            zawodnicy[i].nazwisko[j] = ch;
            fseek(pd, 0L, SEEK_CUR);
            licznik++;
            if (isblank(ch))
                break;
        }
        return licznik;
    }
}

long zapisz_punkty(struct druzyna *zawodnicy, int i, FILE *pd, long licznik, char *ch)            // ta funkcja nie jest skończona  
{
    int punkty[maxpkt];
    int j;

    while (ch != '\n')
    {
        ch = getc(pd);
        for (j = 0; j < maxpkt; j++)
        {
            punkty[j] = ch;
            ch = getc(pd);
            licznik++;

            if (ch == ' ')
            {
                fseek(pd, 0L, SEEK_CUR);
                licznik++;
                break;
            }               
        }       
        fseek(pd, 1L, SEEK_CUR);
        ch = getc(pd);

    }
    return licznik;
}

Pozostało 580 znaków

Nadziany Jeleń
2017-09-29 23:42
Nadziany Jeleń
0

może stwórz z nich string połącz je i zamień na liczbę? albo pomnóż 1 przez 10 dodaj drugą i gotowe

Pozostało 580 znaków

Padre nowicjusz
2017-09-30 00:10
Padre nowicjusz
0

1 i 4 to przykład program ma dowolne liczby zamieniać które natrafi w pliku tekstowym. Jutro spróbuję z tymi stringami

Pozostało 580 znaków

kq
2017-09-30 01:59
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 13 minut temu

Lokalizacja: Szczecin

0

To może po prostu od razu wczytuj liczby, zamiast czytać plik znak po znaku i utrudniać sobie robotę? http://en.cppreference.com/w/cpp/io/c/fscanf


Pozostało 580 znaków

Padre nowicjusz
2017-09-30 02:10
Padre nowicjusz
0

Dziękować. Z przemęczenia zapomniałem że jest taka fajna funkcja.

Pozostało 580 znaków

Odpowiedz

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