czego w tym programie brakuje? co jest źle?

ten program ma wypisywać najmniejszą cyfrę wczytanej liczby a wypisuje jakieś bzdury. dlaczego?

kod do wklejenia

#include
#include
using namespace std;
int main(int argc, char** argv)
{
string liczba;
cout<<"podaj liczbe ";
cin>>liczba;

int dlugosc;
dlugosc = liczba.length();
int najmniejsza;

for(int i; i<=dlugosc; i++)
{
if(liczba[i] {
najmniejsza=liczba[i+1];
cout< }
}
}



Czego W Tym Programie Brakuje Co Jest Źle Ten Program Ma Wypisywać Najmniejszą Cyfrę Wczytanej Liczby A Wypisuje Jakieś Bzdury Dlaczego Kod Do Wklejenia Include class=

Odpowiedź :

REGNAD

Odpowiedź:

Bzdury wypisuje głównie dlatego, że wczytujesz liczbę jako stringa, a potem chcąc porównywać cyfry tej liczby porównujesz wartości zanków (charów) tej liczby, a nie cyfr (co pewnie chciałeś zrobić). Wtedy taka cyfra zamiast planowanej wartości przyjmuje wartość zgodną z kodem ASCII. Dlatego żeby kod ASCII odpowiadał wartościom cyfr musimy od kolejnych znaków liczby odejmować wartość ASCII cyfry 0. Już nie wspominając o tej pętli for, która nie wiem jakim prawem ma działać

Poprawny kod wygląda następująco:

#include <iostream>

#include <string>

using namespace std;

int main(int argc, char const *argv[])

{

   string number;

   cout << "Podaj numer do sprawdzenia jego najmniejszej cyfry" << endl;

   cin >> number;

   int min = number[0] - '0';

   for (int i = 0; i < number.length(); i++)

   {

       if (number[i] - '0' < min)

       {

           min = number[i] - '0';

       }

   }

   cout << "Najmniejsza cyfra tej liczby to " << min;

   return 0;

}

Wyjaśnienie:

Jak coś jeszcze niejasne to pytaj :)

Jak coś to fajnie opisałem algorytm znajdowania największej/najmniejszej liczby w zbiorze w jednym z ostatnich moich odpowiedzi (możesz sprawdzić w moim profilu, ma chyba naj nawet)

#include <iostream>

#include <string>

int main()

{

   std::string liczba;

   std::cout << "podaj liczbe ";

   std::cin >> liczba;

   int najmniejsza = liczba.at(0) - '0';

       

   for(unsigned int i=1; i < liczba.length(); i++)

   {

       if(liczba.at(i) - '0' < najmniejsza)  

       {

           najmniejsza = liczba.at(i) - '0';

       }

   }

   std::cout << najmniejsza << '\n';

}