# Programm in C++ anhalten.



## iLastRescue (29. Juni 2016)

#include <iostream>

#include <cstdlib>

#include <string>

using namespace std;



void ham(int start, int k, string s, int length);

/*

The ham method uses three base cases to print all possible outcomes

Case 1:No more changes left, print the string

Case 2:Cannot make any more changes, end of string

Case 3:Cannot reference a bit past the end of the string

*/



int main()

{

		string input;

		string bit;

		int start = 0;



		cout << "Enter a hamming distance" << endl;

		cin >> input;



		int k = atoi(input.c_str()); //parse the input into an int



		cout << "Enter a binary string" << endl;

		cin >> bit;


		ham(start, k, bit, bit.size());

}



void ham(int start, int k, string bit, int length)

{

		if (k == 0) {

				cout << bit << endl;

				return;

		}

		if (k>1 && start == length - 1)

			return;

		if (start>length - 1)

			return;

		ham(start + 1, k, bit, length);  //Called because no change occurs

		if (bit.at(start) == '0') {        //Called when a change occurs from 0 to 1

				bit.replace(start, 1, "1");

				ham(start + 1, k - 1, bit, length);

		}
		else if (bit.at(start) == '1') {   //Called when a change occurs from 1 to 0

				bit.replace(start, 1, "0");

				ham(start + 1, k - 1, bit, length);


		}

}




Wie kann ich das Programm anhalten am ende ? 

Danke im Voraus


----------



## Malkolm (29. Juni 2016)

return 1 ans Ende in main {} z.B.
Eigentlich sollte der compiler ohnehin meckern, dass int main{} kein return value hat.


----------



## Cinnayum (29. Juni 2016)

Du könntest auch den Durchlauf tracen, also die Variablen überwachen, die dich interessieren und entsprechende Marker im Quelltext setzen.
Das kann normalerweise jeder Compiler.

Wenn du den Code mit dem richtigen Tag im Forum-Editor markierst (erweiterter Modus), wird er sogar lesbar. So wirklich Lust hab ich bei dem Layout nämlich nicht, zu schauen, was dein Programm macht und wann welche Abbruchbedingung eintritt  .


----------



## iLastRescue (29. Juni 2016)

Malkolm schrieb:


> return 1 ans Ende in main {} z.B.
> Eigentlich sollte der compiler ohnehin meckern, dass int main{} kein return value hat.



Ich meine, nachdem ich die 2 Werte eingegeben habe, beendet sich das Programm, ich möchte, dass  sich das Programm dann am Ende nicht schließt und ich den Wert sehen kann den es mir ausgibt^^, also am ende soll es sich nicht Beenden, geht es mit getchar(); ?


----------



## Malkolm (29. Juni 2016)

Ah ok, du nutzt Windows, richtig?
Du "öffnest" das Programm via Doppelklick auf die compilierte .exe, richtig?

Öffne einfach vorher die Console (Win + r -> "cmd") oder die Powershell. Starte dein Programm dann "old fashioned" via "cd [Pfad zu deinem Programm]" + "[Dateiname deines Programms]", damit bleibt die Console offen und du siehst auch die letzte Ausgabe.

Ansonsten ist getchar eine option, oder du packst eine while Schleife in deine main mit Abbruchbedingung, oder eine von 100 anderen Möglichkeiten


----------



## CloudAc (30. Juni 2016)

Warum so umständlich?^^
Entweder mit system("pause") ist jedoch System abhängig, oder du machst es einfach mit: cin.get()


----------

