• 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

Object Storage Arubacloud
0 głosów
80 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 Mędrzec (154,860 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 (29,320 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 566 wizyt
pytanie zadane 29 grudnia 2018 w Java przez studenciak Nowicjusz (230 p.)
0 głosów
3 odpowiedzi 2,450 wizyt
pytanie zadane 12 października 2015 w C i C++ przez lukasz_m Obywatel (1,380 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...