728 x 90

Stworzenie napisu z liczbą

Stworzenie napisu z liczbą

Często nawet nad prostym zadaniem programistycznym można spędzić chwilę czasu. W tym wpisie przedstawię jeden z nich – stworzenie napisu zawierającego liczbę. Do C++11 wprowadzono typy o określonym rozmiarze, znajdujące się w nagłówku cstdint (pełną ich listę można znaleźć w dokumentacji [1]). Skupmy się na typie zajmującym 8 bitów – uint8_t. Jest on dość mały więc idealnie nadaje się do przechowywania niewielkich liczb.

Zadaniem było stworzenie napisu zawierającego liczbę, na przykład “napis-1”. W tym celu wykorzystano stringstream [2], co zaowocowało napisaniem poniższego programu:

#include <iostream> 
#include <cstdio>
#include <sstream>

using namespace std;
 
int main() {
 uint8_t i = 1;
 stringstream s;
 s << "napis-" << i;
 string napis = s.str();
 cout << "Wynik: " << napis << '\n';
 return 0;
}

Wyjście z programu po uruchomieniu:

Wynik: napis-

Tu pojawia się problem, gdzie podziała się liczba? uint8_t jest często aliasem na typ char (np. [3]). Do stringstream nie trafia zatem liczba, ale znak o kodzie 1. Należy zrzutować zmienną na typ liczbowy, aby uzyskać oczekiwany efekt.

 
#include <iostream>
#include <cstdio>
#include <sstream>
using namespace std;

int main() {
 uint8_t i = 1;
 stringstream s;
 s << "napis-" << int(i);
 string napis = s.str(); 
 cout << "Wynik: " << napis << '\n';
 return 0;
}

Wynik działania:

Wynik: napis-1

Czasami nazwa typu zmiennej potrafi być myląca, a nad prostym błędem można spędzić chwilę czasu. Także twórcy języka nie ułatwiają zadania określając jedynie rozmiar tych typów, pozostawiają ich implementację twórcom kompilatorów. Przed takimi błędami programistę może uchronić metoda pracy zgodna z zasadami Test-Driven Development (TDD).

DOBRE LINKI

  1. cstdint (stdint.h)
  2. stringstream::str – C++ Reference
  3. avr-libc: stdint.h Source File

Źródło obrazu tytułowego: skooler.org

Leave a Comment

Your email address will not be published. Required fields are marked with *

Cancel reply

Inne artykuły