Jak określić ilość cyfr w cin>>

Odpowiedz Nowy wątek
2015-10-11 10:46
0

Cześć,
mam pytanie. Jeśli np. określę

int a;
int b;
a następnie,
cout << " X " cin >> a
cout << " Y " cin >> b;

to jak zrobić, żeby określić maksymalną długość (ilość cyfr) wprowadzanej zmiennej "a", tak aby po wyczerpaniu tego limitu program przeszedl automatycznie do wpisywania b.
Chcę to zrobić przy wpisywaniu daty, informując użytkownika o wpisywaniu w formacie dd.mm.yyyy

pozdrawiam

Pozostało 580 znaków

2015-10-11 11:00
2

Takie coś możesz zrobić:

#include<iostream>
#include<string>
using namespace std;

int main() {
    int dzien = 0;
    string linijka = "";
    getline(cin, linijka);
    if (linijka.size() > 2) cout << "Za dluga wartosc!\n";
    else {
        dzien = stoi(linijka);
        cout << dzien << endl;
    }
    return 0;
}

PS: Oczywiście zamiast getline może byc zwykły cin >> linijka;

edytowany 1x, ostatnio: grzesiek51114, 2015-10-11 11:03
dziękuję :) - Kigrins 2015-10-11 11:25
Niestety nie jest to o co mi chodziło do końca, bo miałem na myśli automatyczny przeskok po wyczerpaniu tych dwóch miejsc. Co do rozwiązania, podrasuje je do pętli gdzie wyskoczy błąd przy niepoprawnym formacie i trzeba będzie znowu wklepać datę :) pozdrawiam! - Kigrins 2015-10-11 11:43

Pozostało 580 znaków

2015-10-11 11:07
Wybitny Samiec
0

a moze cos takiego by zadzialalo?

int day;
int i=0;
do{
cin>>day;
++i;
}
while(i>1);
genialne? - Craith 2015-10-11 11:08
nie zadziała - Kigrins 2015-10-11 11:33
a powinno? - Craith 2015-10-11 11:39

Pozostało 580 znaków

2015-10-11 12:57

Może coś w tym kierunku?

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

unsigned long read_limited(size_t max_digits){
    string result;
    while(isspace(cin.peek()))
        cin.get();
    while(isdigit(cin.peek()) && max_digits--)
        result += cin.get();
    return stoul(result);
}

int main() {
    auto x = read_limited(3), y = read_limited(4);

    cout << x << " " << y << endl;
    return 0;
}
in out
123 12345 123 1234

Pozostało 580 znaków

2015-10-11 13:23
kq
5

Po co utrudniać sobie życie? #include <iomanip> i std::setw implementują odpowiednie zachowania.

    int a{42}, b{42};

    string buf;

    cin >> setw(5) >> buf;
    a = stoi(buf);

    cin >> setw(3) >> buf;
    b = stoi(buf);

http://melpon.org/wandbox/permlink/hgKMesuAUbTat21X


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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