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

Dodawanie typu char do tablicy znaków oraz konwersja na int w C

Object Storage Arubacloud
0 głosów
2,538 wizyt
pytanie zadane 13 listopada 2016 w C i C++ przez niezalogowany

Witam,

chcę wykonać operację przedstawioną poniżej.

Trzy znaki muszę zapisać w tablicy znaków a następnie przekonwertować to na int, aby później porównać wartość. Poniżej przedstawiam kod przedstawiający istotę działania.

 

pseudokod:

char *string  = StringData[4] + StringData[5] + StringData[6];
int value = atoi(string);
if(value == 120){
 ;
}

Wie ktoś jak tego dokonać w prawidłowy sposób? Najlepiej używając gotowej funkcji.

1 odpowiedź

0 głosów
odpowiedź 13 listopada 2016 przez draghan VIP (106,230 p.)
wybrane 13 listopada 2016
 
Najlepsza

StringData[4] + StringData[5] + StringData[6];

Czy to oznacza dodawanie arytmetyczne czy konkatenację?

komentarz 13 listopada 2016 przez niezalogowany
Konkatenację charów. :)
komentarz 13 listopada 2016 przez draghan VIP (106,230 p.)
A masz mieć zawsze 3 znaki?
komentarz 13 listopada 2016 przez niezalogowany
Może zdarzyć się mniej ale więcej nie będzie. Te znaki określają parametr funkcji wysyłanej przez usart do mikrokontrolera. :)
komentarz 13 listopada 2016 przez draghan VIP (106,230 p.)
No to dlaczego nie utworzysz tablicy o stałej liczbie elementów i po prostu nie przypiszesz odpowiednich znaków pod odpowiednie indeksy?
komentarz 13 listopada 2016 przez niezalogowany

Najprostsze rozwiązania są najlepsze.

Dzięki.

char str[3] = {StringData[4], StringData[5], StringData[6]};
int val = atoi(str);
if(val == 111)
        GPIO_SetBits(GPIOA, GPIO_Pin_5);

 

komentarz 13 listopada 2016 przez draghan VIP (106,230 p.)
Do prawidłowego działania atoi(), łańcuch na końcu musi zawsze mieć znak zerowy (czyli '\0') - więc str musi mieć rozmiar 4. ;)
komentarz 13 listopada 2016 przez niezalogowany

Pojawił się jeden problem, mianowicie

gdy do tablicy zapiszę np.  {'1','8','znakNiebędącyCyfrą'} poniższy warunek i tak zostanie wykonany. ;( Jak to zabezpieczyć? Dzięki

StringData[4] = '1', StringData[5] = '8', StringData[6] = 'znakNiebedacyCyfra',

char arg[4] = { StringData[4], StringData[5], StringData[6], '\0'}; // parametr funkcji
int value = atoi(arg); // konwersja paramatru na int
if(value == 18){ //ten warunek się wykona dla w/w wartości
}

 

komentarz 13 listopada 2016 przez draghan VIP (106,230 p.)

Taka specyfika funkcji atoi().

Jeśli zależy Ci na tym, żeby w razie gdyby choć jeden ze znaków był inny niż cyfra lub '\0' konwersja się nie wykonywała, musisz samodzielnie sprawdzić każdy znak. Nie jest to trudne, pomoże Ci w tym funkcja isdigit().

Podobne pytania

0 głosów
1 odpowiedź 707 wizyt
pytanie zadane 31 maja 2015 w C i C++ przez Pan Kulomb Pasjonat (18,630 p.)
0 głosów
2 odpowiedzi 6,360 wizyt
pytanie zadane 9 czerwca 2016 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
3 odpowiedzi 1,638 wizyt
pytanie zadane 14 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

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

...