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

Jak określić ilość cyfr w cin>>
Kigrins
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
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

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
2

Takie coś możesz zrobić:

Kopiuj
#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
Kigrins
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!
0

a moze cos takiego by zadzialalo?

Kopiuj
int day;
int i=0;
do{
cin>>day;
++i;
}
while(i>1);
 
spartanPAGE
  • Rejestracja:około 12 lat
  • Ostatnio:dzień
3

Może coś w tym kierunku?

Kopiuj
#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
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
5

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

Kopiuj
	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


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.