Do While problem



  • Hallo ich habe ein Problem mit meinem Code:

    string text;
    int i = 0;

    do
    {

    cout << "mache deine eingabe\n";
    getline(cin, text);

    }

    while ((text.at(i) < 65 || text.at(i) > 90) && (text.at(i) < 95 || text.at(i) > 122) && (text.at(i) = 32));

    Die while untersucht nur den ersten Eintrag im String. bei i++ nur bis den zweiten 😕

    wie schaffe ich, dass er sich alle Einträge anschaut?

    Ich hab es mit for (int i = 0; i < text.size(); i++) in der Do versucht, aber auch dieser untersucht nicht alle Einträge

    vielen dank



  • ftfy:

    #include <cstddef>
    #include <cctype>
    #include <string>
    #include <iostream>
    
    int main()
    {
    	std::string text;
    	bool error;
    
    	do {
    		std::cout << "Mache deine Eingabe: ";
    		std::getline( std::cin, text );
    
    		error = false;
    
    		for( auto ch : text ) {
    			if( !( std::isalpha( ch ) || std::isspace( ch ) ) ) {
    				error = true;
    				break;
    			}
    		}
    
    	} while( error ); 
    }
    

    Vicky15790 schrieb:

    Ich hab es mit for (int i = 0; i < text.size(); i++) in der Do versucht, aber auch dieser untersucht nicht alle Einträge.

    Zeig mal ...



  • #include <iostream>
    using namespace std;
    #include <string>

    int main()

    {
    string text;
    int i = 0;

    do
    {
    for (int i = 0; i < text.size(); i++);
    cout << "mache deine eingabe\n";
    getline(cin, text);

    } while ((text.at(i) < 65 || text.at(i) > 90) && (text.at(i) < 95 || text.at(i) > 122) && (text.at(i) = 32));

    isalpha(ch) und isspace(ch) sollen wir nicht nutzn und Umwandlungen selbst programmieren



  • wie kann ich auto ch : text auch anders schreiben, ohne vordefinierte Funktionen?



  • VIELEN DANK DEIN ANSATZ HAT Mir SEHR GEHOLFEN

    hab es nun so

    #include <iostream>
    using namespace std;
    #include <string>

    int main()

    {
    string text;
    int i = 0;
    bool error;

    do {
    cout << "Mache deine Eingabe: ";
    getline(cin, text);

    error = false;

    for (i = 0; i < text.size(); i++)
    {
    while ((text.at(i) < 65 || text.at(i) > 90) && (text.at(i) < 95 || text.at(i) > 122) && (text.at(i) = 32))
    {
    error = true;
    break;
    }
    }

    } while (error);

    ,,,,,,,



  • for( Type var : container ) ist keine "vordefinierte Funktion" sondern eine seit C++11 vorhandene Variante der for -Schleife.

    Das in dem letzten Codefetzen von dir in der for -Schleife deklarierte i hat mit dem i das weiter oben deklariert ist, nichts zu tun. In der Bedingung der while -Schleife existiert das i aus der for Schleife noch nichteinmal mehr. Dieses i von weiter oben ist von Anfang an 0 und das ändert sich auch nie.



  • Was soll die while -Schleife in der for -Schleife?
    Die Bedingung kann auch ned stimmen. Du meinst 'A' - 'Z' , 'a' - 'z' und ' ' (Space)? Alleine der "Vergleich" gegen Space (32) bei dir ist kein Vergleich, sondern eine Zuweisung.



  • Der soll soll schauen ob der benutzer nur buchstaben einsetzt
    und wenn nicht die frage wiederholen


Anmelden zum Antworten