Kontrola wprowadzanych danych.

0

Dzień dobry. W moim programiku na zaliczenie, jest moment(a w zasadzie, to chyba na tym polega zadanie), w którym prosi o podanie liczby hex o odpowiedniej długości.
cin>>hex

Wszystko prawie działa. Ale mam dwa warunki.Mam funkcję, sprawdzającą długość, ale nie wiem jak tam wcisnąć tego hex'a..

cout << "Podaj liczbę szesnastkowa(klawisze 0-9 i od a do f)\n";
cin >> hex >> liczba;
if((dlugosc(liczba) > 7 )|| cin.fail()){    // <--------- W ten sposób działa, ale mnie obchodzi długość liczby jako hex..
    cout << " wprowadzono błędne dane \n";

    break;
}

Proszę o podpowiedź. Interesuje mnie czy da się to jakoś pogodzić sprytnym manewrem, czy muszę napisać funkcję do konwertowania.

0

Sprytny manewr:

#include <iostream>
#include <string>
#include <sstream>


int main()
{
   int num;
   std::cin >> std::hex >> num;
   std::ostringstream oss;
   oss << std::hex << num;
   std::cout << "length: " << oss.str().size() << std::endl;
} 

input: 0xfffffff
output: length: 7

0

Dziękuję, ale to zbyt sprytne jak na mój poziom:).

0

Co jest zbyt sprytne?
Strumienie znasz, bo używasz std::cin i std::cout.
Czas poznać std::string i współpracujący z nimi strumień std::stringstream.

Mam funkcję, sprawdzającą długość, ale nie wiem jak tam wcisnąć tego hex'a..

edit:
Nie ma takiej potrzeby.
Wklej funkcję dlugosc() i pokaż jak liczysz długość liczby. Używaj do obliczania podstawy sytemu liczbowego i wynik powinien wyjść parwidłowy.

0

Jestem na pierwszym semestrze podstaw programowania.. I tak się wychyliłem ponad grupę. Jesteśmy na etapie funkcji własnych więc do tego pewnie też musi być funkcja. Myślałem, że może da się coś zrobić z tego co jest. (Ostatnio wybiegłem za daleko to dostałem 3 na poskromienie).

0
int dlugosc(int jakas_wartosc){
    int cyfry;
    int liczba = jakas_wartosc;
    cyfry = 1;
    while( (liczba/=10) != 0 ){
        cyfry++;
         }
    return cyfry;
}
0

Profesor ma swoje lata, i może sam zna tylko podstawy.. Takie czasy.

1
int cyfry = 0;
while(liczba > 0) {
    liczba /= 16;
    ++cyfry;
} 

https://wandbox.org/permlink/YH8vkHStY87w1Zpc

0

Jaaa Cie! Dzięki. O to chodziło. Zapraszam na piwo.

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