dodawanie dwóch Charów w C

0

mamy tablice charów

char* x="123";
char* y="852";
char* wynik="0000";
for(int i=0; i<3;i++)
wynik[i]=y[i]+x[i];

ostatnie polecenie nie działa. po porownaniu elementow o kolejnych indexach oczekuję outputu:

1+8=9, 2+5=7, 3+2=5

dowolne kombinacje konwersji (int) i (char) też nie pomagają. np.: wynik[i] = (char) ( (int) y[i] + (int) x[i] ) nie działa

jak mogę inaczej to zrobić żeby działało?
(uprzedzając pytania jest to mi potrzebne do działan arytm. na liczbach nie mieszczących się w long incie)

1

CStringi przetrzymują znaki w kodowaniu ASCII, zatem 1 -> 0x31, 8 -> 0x38, 1 + 8 -> 0x31 + 0x38 -> 0x69 -> i.

Standard C99 definiuje w stdint.h typ uint8_t, który do Twoich zastosowań będzie idealny. Jeśli z jakiegoś powodu nie możesz z tego skorzystać, to możesz np. odejmować '0' od wartości chara przed dodawaniem i dodawać po.

0
Althorion napisał(a):

CStringi przetrzymują znaki w kodowaniu ASCII, zatem 1 -> 0x31, 8 -> 0x38, 1 + 8 -> 0x31 + 0x38 -> 0x69 -> i.

Standard C99 definiuje w stdint.h typ uint8_t, który do Twoich zastosowań będzie idealny. Jeśli z jakiegoś powodu nie możesz z tego skorzystać, to możesz np. odejmować '0' od wartości chara przed dodawaniem i dodawać po.

Rozumiem i dziekuje za odpowiedz. Prawdpodobnie skorzystam z odjecia wartości ASCII z zera. Nadal jednak podtrzymuję pytanie odnośnie błędu tej linijki:
wynik[i]=y[i]+x[i];
czyli char = char+char. Kody ascii cyfr są niskie, a więc ich suma nie jest w stanie spowodować przekroczenia 1 bajta zarezerowanego dla char. Na czym polega błąd tej linii?
w sensie dla przykładu z 1+8, liczba szesnastkowa 0x69 to dziesietne 105, czyli mieści sie w dziesietnym przedziale (0,256) dla chara

0

A co Ci mówi kompilator? Nie mam teraz pod ręką żadnego, żeby sprawdzić, a za późno na parzenie kawy, żeby wróżyć z fusów…

0

Nie zwraca żadnego błędu, ale liczby nie wyświetla. Ponadto kończy program tuż po pierwszym wykonaniu tej linijki.
edit. po dokładniejszym sprawdzeniu już samo przypisanie wynik[i]=x[i]; kończy się tym samym

1

Jak wyświetlasz wynik? Aby tablica charów była poprawnym CStringiem, musi się kończyć na 0x00. Może tu tkwi problem?

Ogólnie, zapraszam do zabawy debuggerem tutaj, trochę trudno bez tego dociekać.

0
testkontoxd napisał(a):

mamy tablice charów

char* x="123";
char* y="852";
char* wynik="0000";
for(int i=0; i<3;i++)
wynik[i]=y[i]+x[i];

Te pięć linii ma chyba z 8 błędów świadczących o zupełnym nie rozumieniu C. Książkę w rękę i próbuj na czymś prostszym.

0

dobra ogarnałem ze char* nie mozna potem edytowac xD bylo słuchac uwazniej na wykładzie
usuncie temat bo autysci sie zesrają jak ten tutaj

AnyKtokolwiek napisał(a):
testkontoxd napisał(a):

mamy tablice charów

char* x="123";
char* y="852";
char* wynik="0000";
for(int i=0; i<3;i++)
wynik[i]=y[i]+x[i];

Te pięć linii ma chyba z 8 błędów świadczących o zupełnym nie rozumieniu C. Książkę w rękę i próbuj na czymś prostszym.

1

Można edytować. Nie można edytować literałów znakowych, a te niestety można przypisywać do wskaźników na mutowalne znaki. C++ tego błędu się już pozbył.

Użyj

char wynik[]="0000";
0

w ogóle co trzeba miec w banii zeby napisac komus na forum "hehe widze tutaj nowicjusz, duzo bledow wgl nie rozumiesz, ale w zasadzie to nie powiem ci co i jak. idz robic cos prostszego".

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