Anzahl der Nummern in einer mehrstelligen Zahl auslesen



  • Hallo!

    Ich bin neu in C++ und bin grade über das "Hello World" hinaus.

    Ich schreibe grade eine mini Consolen Anwendung, in der über cin eine Zahl abgefragt wird, die aber 4 Stellen haben soll. Ich versuche über eine if Abfrage die Eingabe abzufangen. Leider weiß ich nicht, wie ich die im Array speicher[0] gespeicherten Wert auf die Anzahl der Zeichen zu überprüfen. Gibt es da irgend eine Möglichkeit die Anzahl auszulesen?

    mein Ansatz war bisher so:

    #include <iostream.h>
    #include <algorithm>

    int main()
    {

    int speicher[4];

    std::cout<<"Geben Sie eine 4stellige Zahl ein:"<<endl;
    std::cin>>speicher[0];
    std::cout<<count(speicher[0]);

    if(sizeof(speicher[0]<4))// das geht so nicht
    {
    std::cout<<speicher[0]<<"kleiner 4"<<endl;
    }

    if(sizeof(speicher[0]>4))// auch nicht
    {
    std::cout<<speicher[0]<<"großer 4"<<endl;
    }

    }



  • Wo ist meine Antwort hin??? Ich hasse denjenigen der verantwortlich ist dass sie gelöscht ist!

    int main()
    {
        int num;
        cin >> num;
    
        cout << "Stellen: " << ceil(log10(static_cast<double>(num)));
    }
    
    int main()
    {
        int num;
        cin >> num;
    
        int stellen = 0;
        while(num) {
            ++stellen;
            num /= 10;
        }
    
        cout << "Stellen: " << stellen;
    }
    


  • Du könntest auch einfach überprüfen, ob die eingegebene Zahl zwischen 1000 und 9999 (einschließlich) liegt.



  • Grgrgr schrieb:

    Wo ist meine Antwort hin??? Ich hasse denjenigen der verantwortlich ist dass sie gelöscht ist!

    schlimm, wenn antworten einfach verschwinden. sag bescheid, wenn das öfters vorkommt, ich werde mich dann drum kümmern. ich hab letztens hier nur einen von so einem KennerDer...-troll gelöscht, die haben in fachforen nix zu suchen.



  • Grgrgr schrieb:

    int main()
    {
        int num;
        cin >> num;
    
        cout << "Stellen: " << ceil(log10(static_cast<double>(num)));
    }
    

    bei log10(1) = 0, das gleiche Problem hat man bei allen 10er Potenzen, dass das Ergebniss um eins zu klein ist



  • Ich danke euch!

    Wegen der Null, das kann man ja abfangen!

    #include <iostream.h>
    #include <algorithm>
    
    int main()
    {
    int speicher[4], check;
    
    	while (check != 4)
    	{	
    		std::cout<<"Geben Sie eine 4stellige Zahl ein:"<<endl;
    		std::cin>>speicher[0];
    		check = ceil(log10(static_cast<double>(speicher[0])));
    		std::cout<<check<<endl;
    		if(check != 4)
    		{	
    				if(check == 0)
    				{ 
    					check = 1;
    				}	
    				std::cout<<"Sie haben eine "<<check<<"stellige Zahl eingegeben!"<<endl<<"bitte eine 4stellige Zahl eingeben!"<<endl;
    		}
    	}
    
    }
    

    //Edit: Codetags korrigiert (evilissimo)



  • hand hoch, wer packt hier freiwillig nen log aus?

    int stellen(int zahl){
        if(zahl==0)
            return 1;
    
        int anzahl=0;
        for(;zahl;zahl/=10)
             ++anzahl;
    
        return anzahl;
    }
    
    int main()
    {
    int speicher[4], check;
    
        while (check != 4)
        {   
            std::cout<<"Geben Sie eine 4stellige Zahl ein:"<<endl;
            std::cin>>speicher[0];
            check = stellen(speicher[0]);
            std::cout<<check<<endl;
            if(check != 4)
            {    
                std::cout<<"Sie haben eine "<<check<<"stellige Zahl eingegeben!"<<endl<<"bitte eine 4stellige Zahl eingeben!"<<endl;
            }
        }
    
    }
    


  • Was meinst du damit?

    ps: dumme frage wie mache ich das mit dem

    test
    

    ?



  • RaoulVB schrieb:

    Was meinst du damit?

    Wegen dieser Frage höhere Gleitkomma-Arithmetik (Logarithmus) auszupacken, dürfte in die Kategorie "mit Kanonen auf Spatzen schießen" fallen 😉

    PS: Wenn es dir nur um die Frage "ist es eine 4stellige Zahl?" geht, dürfte selbst die Schleifenkonstruktion zu viel sein:

    cin>>speicher[0];
    while(speicher[0]<1000||speicher[0]>9999)
    {
      cout<<"Die Zahl war zu "<<(speicher[0]<1000?"kurz":"lang")<<endl;
      cout<<"Bitte 4stellige Zahl eingeben:";
      cin>>speicher[0];
    }
    


  • Mir geht es primär dadrum die Programierlogik zu verstehen, das ist nur ein Beispiel, dass ich nachvollziehen kann, wie ich bestimmte Sachen abfangen bzw ermitteln kann.

    Ist schon klar das es viel Aufwand ist für das wenige, soviel zu tippen, aber es hilft mir es zu verstehen 😉

    zb jetzt das hier:

    #include <iostream.h>
    #include <algorithm>
    
    int main()
    {
    int speicher[6], check, var;
    
    	while (check != 4)
    	{	
    		std::cout<<"Geben Sie eine 4stellige Zahl ein:"<<endl;
    		std::cin>>speicher[0];
    		if(speicher[0] == 0000)
    		{
    		speicher[0] = 1;
    		}
    		check = ceil(log10(static_cast<double>(speicher[0])));
    		std::cout<<check<<endl;
    		if(check != 4)
    		{	
    				if(check == 0)
    				{ 
    					check = 1;
    				}	
    				std::cout<<"Sie haben eine "<<check<<"stellige Zahl eingegeben!"<<endl<<"bitte eine 4stellige Zahl eingeben!"<<endl;
    		}
    	}
    
    	speicher[1]= speicher[0]%10; //* lezte Zahl
    	speicher[2]= speicher[0]%100; // * vor- und letze
    	speicher[3]= speicher[2]/10;//* vorletze
    	speicher[4]= speicher[0]/100;//*erste und zweite
    	speicher[5]= speicher[4]%10;//* zweite Zahl
    	speicher[6]= speicher[0]/1000;//* erste Zahl
    
    	std::cout<<"erste Zahl:"<<speicher[6]<<endl<<"zweite Zahl:"<<speicher[5]<<endl<<"dritte Zahl:"<<speicher[3]<<endl<<"vierte Zahl:"<<speicher[1]<<endl;
    
    	var=speicher[6]+speicher[5]+speicher[3]+speicher[1];
    
    	std:cout<<"Die Quersummer der 4 Zahlen lautet: "<<var<<endl;
    }
    

    alles nur übungen ums lernen willen



  • Achso - dann gib deinem Programm mal die Eingabe 10000 und beobachte, was passiert 😃


Anmelden zum Antworten