Frage von KleinerFetzen, 74

Mein c++ Programm macht nicht was ich will?

Ich muss für eine C++ Übung folgendes Programm schreiben:

Schreiben Sie ein Programm, das zunächst eine Zeichenkette (max. 80 Zeichen) einliest und dann immer wieder ein einzelnes Zeichen einliest und die Zeichenkette ausgibt, die entsteht wenn man das zuletzt eingegebene Zeichen aus der ursprünglichen Zeichenkette entfernt. (Das Programm soll durch Eingabe eines ! beendet werden.)

das hab ich bis jetzt: #include

using namespace std;

int main () {

int n,T; char x; char w[81];

T=1;

while (T==1){ cout << "Bitte ein Wort eingeben. (max 80 Zeichen!)"; cin >> w; cout << "Bitte einen Buchstaben eingeben! (Beenden durch eingabe eines !)" << endl;

    for(x; x!='!';){ 
            cin >> x;
        for (n=0; w[n]!='\0';n=n+1) {
        if (w[n]!=x) {
            cout << w[n];}
        } 

    };

cout << "Nochmal? JA=1, NEIN=0.";
cin >> T;

};

return 0;

}

Das Problem ist, wenn ich versuche das Programm mithile der Schleife neu zu starten, lässt er mich zwar ein neues Wort eingeben, fragt mch dann jedoch sofort ob ich neu starten möcht, ohne das ich einen Buchstaben eingeben könnt. Wo liegt der Fehler bei meinem Programm? Ich such schon seit ewigkeiten, find aber nichts.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ralphdieter, 43

x ist nicht initialisiert. for(x; x!='!';) kann daher sofort abbrechen. Beim zweiten Lauf steht sogar ganz sicher noch ein '!' vom Ende des ersten Laufs drin.

Abhilfe: x sauber initialisieren: for (x=' '; ...),
oder: do { ... } while (x!='!'); schreiben.

Kommentar von KleinerFetzen ,

Danke, jetzt funktionierts!

Kommentar von ralphdieter ,

Gern geschehen. Dank zurück fürs Sternle :)

Antwort
von JutenMorgen, 16

Du solltest die Klasse std::string verwenden da diese sicherer und einfacher zu handhaben ist als ein char array.

Dann sollte die Abfrage deiner while-Schleife das "!" abfragen, da dies als Ende interpretiert wird.

Ich würde dazu eine extra Methode machen void read() oder whatever die du dann nochmal aufrufen kannst, falls ja eingegeben wird....

Das dein Programm nicht funktioniert leigt einfach daran, dass du das x nicht mehr überschreibst.

Das hier hab ich mal kurz zusammen geschrieben, kann mir aber nicht vorstellen, dass es auf Anhieb funktioniert war nur ne Idee um mich ein wenig abzulenken von meiner cpp Hausübung :D

#include <std::iostream>
#include <std::string>

void getInput(std::string);

int main()
{
char c;
std::string string;
bool end = false;

std::cout << "geben sie eine Zeichenkette ein" << std::endl;
std::cin >> string;
getInput(string);

while (end == false)
{
std::cout << "Nochmal? JA=1, NEIN=0." << std::endl;
std::cin >> c;
if (c == 1)
{
std::cout << "geben sie eine Zeichenkette ein" << std::endl;
std::cin >> string;
getInput(string);
}
else if (c == 0)
{
end = true;
}
else
{
std::cout << "falsche eingabe" << std::endl;
}
}
}

void getIput(std::string string_)
{
char c;
while (c != '!')
{
std::cout << "geben sie ein Zeichen ein" << std::endl;
std::cin >> c;

for (int i = 0; i < string_.size(); i++)
{
if (string_.at(i) == c)
{
string_.erase(i, 1);
i--;
}
std::cout << string_ << std::endl;
}
std::cout << string_ << std::endl;
}
}

Liebe Grüße, JutenMorgen!

Antwort
von Suboptimierer, 29

Am Ende der Schleife solltest du x resetten: x = ''; 

Es steht immer noch ein ! drin.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten