• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Macierz - problem z wpisaniem liczb

Object Storage Arubacloud
0 głosów
180 wizyt
pytanie zadane 25 października 2016 w C i C++ przez ewazdomu Początkujący (320 p.)

Witam, chcę wczytać z pliku .txt macierz kwadratowa zapisaną jak poniżej i gdy próbuję odczytać wartości elementów to np. dla macierzy o rozmiarze 3 zamiast 9 elementów pojawia się 18, próbowałem rozwiązać ten problem sam ale nie udało się mi się. Może ktoś zauważy czemu dopisywane są nowe elementy? 

#include <stdio.h>
#include <stdlib.h>

int read();
int size();
int det(int** matrix, int s);

int main()
{
    int s;
    int **m ;
    m = read();
    s = size();
    printf("Rozmiar = %i\n\n", s);


    printf("Wyznacznik wynosi: ",det(m, s));

    return 0;

}
int size()
{
    FILE* f;
    int size;

    f = fopen("matrix.txt", "r");
    if (f == NULL) {
        printf("Blad otwarcia pliku liczby.txt\n");
        return 1;
    }

    printf("Pomyslnie wczytano macierz\n");
    fscanf(f, "%d", &size);

    return size;
}
int read()
{

    FILE* f;
    int liczba, i, j, size;

    f = fopen("matrix.txt", "r");
    if (f == NULL) {
        printf("Blad otwarcia pliku liczby.txt\n");
        return 1;
    }

    fscanf(f, "%d", &size);

    int** matrix;

    matrix = malloc(size * sizeof(int*));
    for (i = 0; i < size; i++) {
        matrix[i] = malloc(size * sizeof(int));
    }

    printf("Sizeof matrix: %ld \n", sizeof(matrix));
    for (; feof(f) == 0;) {
        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                fscanf(f, "%i", &liczba);
                matrix[i][j] = liczba;
                printf("%i\t", liczba);
            }
            printf("\n");
        }
    }

    printf("Macierz zostala wypelniona: \n");
    for (i = 0; i < size; i++) {
        for (j = 0; j < size; j++) {
            printf("%i\t", matrix[i][j]);
        }
        printf("\n");
    }

    fclose(f);

/*    for (i = 0; i < size; i++)
    {
        free(matrix[i]);
    }
    free(matrix);
*/
    return **matrix;
}

int det(int** matrix, int s)
{
    int i = 0, j = 0;
    if(s==1)
        return matrix[i][j];
    if(s==2)
        return matrix[0][0] * matrix[1][1] - matrix[0][0] * matrix [1][1];

}

 

1 odpowiedź

0 głosów
odpowiedź 25 października 2016 przez draghan VIP (106,230 p.)
W funkcji read() masz o jednego fora za dużo przy wczytywaniu danych z pliku. Warunek eof powinieneś sprawdzać w innym miejscu.

Pytania poza konkursem.
Dlaczego Twoje funkcje read() i det() są typu int, skoro mają zwracać wskaźnik int**?
Dlaczego osobno wczytujesz z pliku sam rozmiar macierzy, skoro już na etapie wywołania funkcji read() rozmiar masz dostępny?

Podobne pytania

0 głosów
0 odpowiedzi 487 wizyt
pytanie zadane 23 lutego 2020 w C i C++ przez Michał2019 Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 553 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 2,024 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez ancyk96 Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...