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

Przekazywanie argumentu z funkcji do funkcji w C

0 głosów
44 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez arccx Nowicjusz (210 p.)

Witam, mam do napisania prosty program, który zamienia podaną przez usera liczbe calkowitą na binarna i z powrotem. Zamiana z calkowitej na binarną działa poprawnie natomiast przy zamianie z binarnej na calkowita caly czas dostaje output w postaci liczby 568. Mam wrazenie ze winny jest temu niepoprawny sposob przekazania argumentu z 1 funkcji do drugiej, nizej wklejam kod: 

 

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

int konwerterdobin(int calkowita){
    static int binarna=0, przechowalnia, mnoznik=1;
    while (calkowita!=0){
        przechowalnia=calkowita%2;
        calkowita=calkowita/2;
        binarna=binarna+przechowalnia*mnoznik;
        mnoznik=mnoznik*10;
    }
    return binarna;
}

int konwerterdocalk(int binarna){
    int i=0,przechowalnia,calkowita=0;
    while (binarna!=0){
        przechowalnia=binarna%10;
        binarna=binarna/10;
        calkowita=calkowita+przechowalnia*pow(2,i);
        ++i;
        }
    return calkowita;
}




int main(){
    int calkowita, binarna;
    printf("Podaj liczbe calkowita wieksza od zera\n");
    scanf("%d", &calkowita);
    printf("Liczba po konwersji do wersji binarnej wynosi %d\n", konwerterdobin(calkowita));
    printf("Liczba po binarna po konwersji na calkowita wynosi %d", konwerterdocalk(&binarna));
    return 0;
}

Dzieki za kazda pomoc

2 odpowiedzi

+1 głos
odpowiedź 16 listopada 2020 przez tangarr VIP (138,360 p.)
1. Zmienna binarna jest niezainicjowana (nigdy nie przypisujesz do niej wartości)
2. Do funkcji konwerterdocalk przekazujesz adres zmiennej binarna zamiast jej wartości.
0 głosów
odpowiedź 16 listopada 2020 przez Oscar Nałogowiec (25,750 p.)

Zmienne lokalne w funkcji są całkowicie niezależne od innych zmiennych nawet o takiej samej nazwie, ale występujących w innych funkcjach. Parametr to też jest zmienna lokalna.

Zmienna binarna w funkcji main jest po prostu niezainicjowana.

Dlaczego przekazujesz jej wskaźnik, a nie wartość?

Najprościej podstaw wynik wywołąnia konwerterdobin(calkowita) do zmiennej binarna. Ostatecznie można to dokonać wewnątrz wywołania printf.

Podobne pytania

0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 29 grudnia 2018 w Java przez studenciak Nowicjusz (230 p.)
0 głosów
3 odpowiedzi 1,883 wizyt
pytanie zadane 12 października 2015 w C i C++ przez lukasz_m Obywatel (1,380 p.)

88,355 zapytań

136,952 odpowiedzi

305,669 komentarzy

58,619 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...