Cześć mam mały problem, napisałam taki program, który ma wczytywać ciąg liczb całkowitych dodatnich aż do napotkania liczby ujemnej i dla każdego ciągu wypisywac komunikat, w zależności od długości tego ciągu, tylko nie wiem jaki dać warunek while(), mógłby mi ktos pomóc, z góry dzięki. A i jeszcze jedno pytanie, jak uwzględnić, żeby wczytywać ciąg do napotkania liczby ujemnej?
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string a;
do
{
cout<<"Podaj ciag= "; cin>>a;
{
int d=a.length();
{
if(d==1) cout<<"? 1"; else
if(d==2) cout<<"? 2"; else
if(d==3) cout<<"? 3"; else
if(d==4)cout<<"? 4"; else
cout<<"? 555";
}
}
}
while (string a !=0)
return 0;
}
Nie do końca rozumiem o co chodzi w tym kodzie. Aby sprawdzić, czy w ciągu liczba jest ujemna musiałbyć wczytywać tablicę charów i w momencie, gdy znajdziesz ‘-’ przerwać wczytywanie:
char array[1000];
for (int i = 0; i < 1000; i++)
{
std::cin >> array[i];
if (array[i] == '-')
{
std::cout << "Napotkano cyfrę ujemną, przerywam wczytywanie";
i = 1000;
}
}
W pętli for daliśmy warunek, żeby powtarzać dopóki i<1000, bo tablica ma długość 1000 (a nie chcemy wyjść poza tablicę, prawda?)
Tak więc i=1000 oznacza wyjście z pętli, gdyż wtedy warunek i<1000 nie będzie wówczas spełniony. To przypisanie jest w if-ie, wiec wyjście z pętli wczytujacej liczby nastąpi po wczytaniu ujemnej rozpoznawanej po minusie.
To tyle o tajemniczym i = 1000. Teraz przyczepie sie do jednego detalu :D.
Warunek w treści zadania jest dla niedodatniej, a nie ujemnej. Trzeba do ifa dodać jeszcze wykrywanie 0. Czyli
Nie można w nieskończoność wczytywać moim sposobem liczb. Przyjąłem, że maksimum, to tysiąc. Pętla for kończy się właśnie gdy i >= 1000. Niestety chyba nie do końca zrozumiałem zadanie, więc mój sposób się nie nadaje.
taki mały myk, żeby nie wyświetlać ilości znaków niczego co nie spełnia warunków w while’u … albo żeby ich nie sprawdzać dwa razy; dla porównania odpal sobie poniższe i wpisz coś z minusem, albo zero
// ...
int main()
{
string a;
int d;
do {
cout << "podaj ciag: ";
cin >> a;
d = a.length();
if (d < 5)
cout << " ? " << d << endl;
else
cout << " ? 555" << endl;
} while (a[0] != '-' && a != "0");
return 0;
}
po wpisaniu zera wyświetli się 1 i program zakończy się; przy wpisaniu np. -123 wyświetli się 4 i również się zakończy; a IMHO w tych wypadkach powinno się zakończyć bez wypisania tych ilości;
można to prawidłowo napisać też tak:
// ...
int main()
{
string a;
int d;
while (true){
cout << "podaj ciag: ";
cin >> a;
if (a[0] != '-' && a != "0"){
d = a.length();
if (d < 5)
cout << " ? " << d << endl;
else
cout << " ? 555" << endl;
} else {
break; // kończy pętlę while
}
};
return 0;
}
To że to newbie nie znaczy że masz mu dawać to co napisałeś, jeśli będzie miał wypisać 100 liczb a od 101 wypisywać coś innego to będzie przepisywać 100x to co mu dałeś z tymi ifami
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x,z;
while((cin>>x)&&(x>=0)&&(z=1+floor(log10(x)))) cout<<x<<" size: "<<(z>4?555:z)<<endl;
return 0;
}