Nie działające funkcję 

0

Mam problem, pewnie wynikający z tego, że przekazuje do funkcji przez wartość ale jak chce zmienić przez referencję to mi nie działa . Problem jest taki, że jak wpisuje np 1/4 to wypisuje mi jakieś dziwne liczby zamiast 1/4 jak to rozwiązać?

#include<stdio.h>
#include<math.h>
typedef struct lw{
    int l;   /**licznik**/
    unsigned m;    /**mianownik**/
} liczbaWymierna;

void wypisz( liczbaWymierna a)/** procedura wypisuje liczbÍ wymiernπ w postaci licznik/mianownik, np 1/5, -3/17, 107/3 itd**/
{
    printf("%d/%u",a.l, a.m);
}


void czytaj( liczbaWymierna a)
{
    
    scanf("%d/%u", &a.l, &a.m);
  

}

int main(void){

    liczbaWymierna a;
    
    czytaj(a);
    wypisz(a);
    
    
   
    
return 0;
}

0

Z tego chaotycznego pytania wynika, że wiesz co jest źle czytaj, ale boisz się boisz się podjąć prób zmian.

Polecam nauczyć się obsługi debuggera.
Prawda jest taka, że im większego ktoś ma skill-a tym mniej go używa, ergo początkujący powinien używać go nonstop.

0

Próbowałem w taki sposób żeby dodać tu & ale nie działał mi program, próbowałem też przez wskaźnik i też nie działało. Po prostu mniej więcej wiem o co chodzi, ale nie wiem jak to zmienić.

void czytaj( liczbaWymierna & a)
1

W języku C nie istnieją referencje (za to wskaźniki tak). Pokaż co próbowałeś.

0

Coś takiego i to nie działa , ale czy wskaźniki to konieczność? Bo nie wiem czy dalsza część kodu mi się przez to nie wysypie
Mam taki komunikat, ale zbytnio mi nie pomaga

Member reference type 'liczbaWymierna *' (aka 'struct lw *') is a pointer; did you mean to use '->'?
void czytaj( liczbaWymierna *a)
{
    
    scanf("%d/%u", *a.l, *a.m);
  

}

int main(void){

    liczbaWymierna a;
    liczbaWymierna *wsk_a = &a;
    czytaj(wsk_a);
    wypisz(a);
    
    
   
    
return 0;
}
0

Na pewno działa? Nie powinno. A wskaźniki to w tym zadaniu konieczność.

0

Może problem w tym, że to jest czysty C -ansi -Wall -pedantic? Bo nie działa tak jak na załączonym screenie

1

Na screenie jest pokazane, że nie tylko nie działa, ale też się nie buduje. Bo nie ma prawa się budować, szczególnie z -pedantic

3

Jak piszesz *a.l, to jest to impretowane jako *(a.l), podczas gdy chcesz (*a).l (to jest dopiero wartość zmiennej), lub &(*a).l (to jest jej adres, czyli to czego chcesz w przypadku scanfa). Kompilator też podpowiada o możliwości użycia strzałki, np &a->l.

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