Problem bei zwei Programmen mit schleifen!?



  • Zu 1:

    static const char* numbers[] =
    	{ "Null", "Eins", "Zwei", "Drei", "Vier", "Fuenf", "Sechs", "Sieben", "Acht", "Neun" };
    
    // ...
    
    while(zahl != 0)
    {
    
    ziffer = zahl % 10;
    zahl = zahl / 10;
    umgedreht = umgedreht * 10 + ziffer;
    
    	printf( "%s ", numbers[ ziffer ] );
    }
    


  • Ja das mit e ist natürlich nicht das Prob, aber wie kann ich den ASCII ins Programm einbinden?



  • Das mit den Einrückungen sieht bei mir eigentlich auch so aus. Beim Eintrag wurde die Formatierung aber irgendwie nicht übernommen!



  • Putzfrau schrieb:

    Das mit den Einrückungen sieht bei mir eigentlich auch so aus. Beim Eintrag wurde die Formatierung aber irgendwie nicht übernommen!

    Dann versuch doch mal rauszufinden, warum. Tipp: Es hat was damit zu tun dass der Code in den Beiträgen der anderen eingerahmt und bunt ist.



  • Danke für den Tipp!

    @David_pb Danke aber soweit sind wir glaub noch nicht!



  • So evtl.

    #include <cstdlib>
    #include <iostream>
    #include <string>
    
    int main()
    {
        const char* numberLookup[] = {"null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
    
        std::string input;
        std::string output;
    
        while(true)
        {
            std::cout << "Input> ";
            std::cin >> input;
            if(input == "e")
            {
                break;
            }
    
            output = "";
            for(std::string::reverse_iterator riter = input.rbegin(); riter != input.rend(); ++riter)
            {
                if(static_cast<unsigned long>(*riter - '0') < 10)
                {
                    output = output +  numberLookup[*riter - '0'] + ' ';
                }
                else
                {
                    output = input;
                    break;
                }
            }
            std::cout << output << '\n';
        }
    
        return EXIT_SUCCESS;
    }
    


  • Oder so:

    static const char* numbers[] =
    	{ "null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "unknown" };
    
    	std::string line;
    
    	do
    	{
    		std::getline( std::cin, line );
    
    		for( std::string::reverse_iterator it = line.rbegin(); it != line.rend(); ++it )
            {
    			printf( "%s ", numbers[ std::isdigit( *it ) ? *it & 0xf : 10 ] );
    		}
    
    	}  while ( line == "e" );
    


  • Hmm...

    David_pb schrieb:

    while ( line == "e" );
    

    Hmm...

    David_pb schrieb:

    printf(...)
    


  • Ups! 😮

    So:

    static const char* numbers[] =
    	{ "unknown", "null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun" };
    
    	std::string line;
    
    	while ( 1 )
    	{
    		std::getline( std::cin, line );
    
    		if ( line == "e" )
    			break;
    
    		for( std::string::reverse_iterator it = line.rbegin(); it != line.rend(); ++it )
            {
    			printf( "%s ", numbers[ bool( std::isdigit( *it ) ) * ( ( *it & 0xf ) + 1 ) ] );
    		}
    	}
    


  • Es ist nicht besser geworden:

    while(1)
    //...
    printf( "%s ", numbers[ bool( std::isdigit( *it ) ) * ( ( *it & 0xf ) + 1 ) ] );
    

    Ausserdem sollte bei Falscheingabe die Eingabe ausgegeben werden und nicht unknown.



  • Doch, ist besser geworden. Die Abbruchbedingung stimmt nämlich jetzt. Nur die Ausgabe nicht! 🙂



  • Danke aber ihr macht das ganze hier viel zu professionell!?

    eins hab ich jetzt. Gibts bei 2 einfach eine Möglichkeit, wie z.B.

    while(a!='e')
    ....

    hier wird solang ausgeführt bis ein e eingegeben wird. Gibts sowas auch für die Zahlen, bzw. ASCII?



  • Jadoch die Möglichkeit gibts:

    char c;
    
    	while ( true )
    	{
    		std::cin >> c;
    
    		if ( c == 'e' )
    			break;
    
    		// tu irgendwas mit c
    	}
    


  • Ich glaube, dir ist nicht ganz klar, was das mit dem ASCII bedeutet. Du musst dafür nichts "einbinden", oder so, intern werden die eingegebenen Zeichen (normalerweise) als ASCII codiert, d.h. 'e' entspricht zum Beispiel der Zahl 101 in Dezimal, bzw. 65 in Hexadezimaler schreibweise. Dadurch kannst du zum Beispiel prüfen, ob ein Zeichen, nennen wir es c 0,1,2,3,4,5,6,7,8,9 ist, indem du schreibst if('0' <= c && c <= '9'), da die Ziffern im ASCII-Code "hintereinander" stehen.

    Felix


Anmelden zum Antworten