C++ switch/case-Proglem

von Schnitzel

Captain
Registriert
Apr. 2008
Beiträge
3.903
switch/case-Problem

Moin moin zusammen,

ich bein noch ein Programmier-Noob und hab ein kleines Problem mit einem (noch nicht fertigen) Code.
Es geht, um genau zu sein, um die eingegebene IP.

Wenn diese am Anfang eingegeben wird, funktioniert alles wie es soll.
Wenn ich sie allerdings im Fall 1 eingeben, wird sie zwar richtig wieder angezeigt, aber die Verarbeitung erhält nur kryptische Zeichen.
Egal, was ich - mit meinen noch beschränkten Programmierkenntnissen - mache, entweder ich bekomme beim Kompilieren eine Fehlermeldung, oder es hilft nicht.

Thx im Voraus.

Code:
#include <iostream>
#include <stdio.h>
#include <sstream>
#include <conio.h>

using namespace std;

int main()
{
	char auswahl;
	char IP [14];
	//cin >> IP;
	stringstream ns, nb;
	ns << "nslookup " <<  IP;
	nb << "nbtstat -A " << IP;
	
	do
	{
		cout <<"Startmenue" << endl;
		cout <<"[1] IP prüfen" << endl;
		cout <<"[2] Credits" << endl;
		cout <<"[3] Programm beenden" << endl;
		
		cout <<"\nEingabe: ";
		cin >> auswahl;
		
		switch(auswahl)
		{
			case('1'):
			cout <<"IP-Eingabe"  << endl;
			cout <<"\nBitte IP eingeben" << endl;
			cin >> IP;
			cout <<"Die eingegebene IP lautet: "<< IP << endl;
			system(ns.str().c_str());
			system(nb.str().c_str());
			getch();
			break;
			
			case('2'):
			cout <<"von Schnitzel";
			getch();
			break;
			
			case('3'):
			cout <<"Programm wird beendet";
			getch();
			break;
		}
		
		getchar();
		system("cls");
		
	}
	while (auswahl =3);

	cin.ignore();
	return 0;
}
 
Bin grade in der Arbeit und hab daher nicht viel Zeit. Beim Überfliegen hab ich mal die folgenden Sachen gesehen:

Code:
	char IP [14];
Warum nicht std::string, was um einiges sicherer wäre und auch das nächste Problem unterbinden würden...

Code:
	//cin >> IP;
	stringstream ns, nb;
	ns << "nslookup " <<  IP;
	nb << "nbtstat -A " << IP;

IP ist nicht initialisiert!

Code:
			system(ns.str().c_str());
			system(nb.str().c_str());

1. "system" ist eine der schrecklichsten Funktionen in der kompletten Standardbibliothek
2. Dein Stream wird nie zurückgesetzt und IP Adressen - wenn denn mal eine gültige in IP steht werden immer weiter hinten


Mögliche Lösung:
Code:
			case('1'):
			cout <<"IP-Eingabe"  << endl;
			cout <<"\nBitte IP eingeben" << endl;
 			std::string IP;
			cin >> IP;
			cout <<"Die eingegebene IP lautet: "<< IP << endl;
			system(("nslookup " + IP).c_str());
			system(("nbtstat -A " + IP).c_str());
			getch();
			break;
 
Zuletzt bearbeitet:
AW: switch/case-Problem

von Schnitzel schrieb:
Code:
            cin >> IP;
            cout <<"Die eingegebene IP lautet: "<< IP << endl;
            system(ns.str().c_str());
            system(nb.str().c_str());
            getch();
            break;

Und wo genau fügst Du die IP Deinem System-Kommando hinzu?
 
Hi,
bin auch gerade auf Arbeit und bilde mich nebenbei selbst vor. :lol:
Das Thema "system" hab ich schon gelesen, nur bin ich Anfänger und nutze daher, was ich kriegen kann ... noch.

Die Initialisierung erfolgt bei case('1') - eigentlich.
Wenn ich allerdings das ganze "stringstream ..."-Zeug dort reinschreibe, bekomme ich eine Fehlermeldung beim Kompilieren bei case('2').
Wie schon geschrieben, wenn ich die IP-Eingabe gleich am Anfang nutze, funktioniert alles wie es soll, nur sollte die IP erst nach der Auswahl im Menü eingegeben werden und nicht schon vor erscheinen des Menüs.

Werde mir deinen Lösungsvorschlag in der Pause gleich mal anschauen.
Thx.

@blöderidiot
Bei "cin >> IP;"
 
1) Mit cin >> IP; fügst du nicht die eingelesene IP in die Stringstreams ein! In den Stringstreams stehen ja keine Verweise auf IP!
2) Dein Compilerproblem wird ein fehlender Block im Case sein... also
Code:
case '1': {
  std::stringstream ns; 
  ...
} break;
muss funktionieren.
 
Zuletzt bearbeitet:
AW: switch/case-Problem

Ne, funktioniert immer noch nicht.

Hier mein jetziger Code.
Code:
#include <iostream>
#include <stdio.h>
#include <sstream>
#include <conio.h>

using namespace std;

int main()
{
	char auswahl;
	
	do
	{
		cout <<"Startmenue" << endl;
		cout <<"[1] IP pruefen" << endl;
		cout <<"[2] Credits" << endl;
		cout <<"[3] Programm beenden" << endl;
		
		cout <<"\nEingabe: ";
		cin >> auswahl;
		
		switch(auswahl)
		{
			case '1':
			{
			cout <<"\nIP-Eingabe"  << endl;
			cout <<"\nBitte IP eingeben" << endl;
			string IP;
			cin >> IP;
			stringstream ns, nb;
			ns << "nslookup " <<  IP;
			nb << "nbtstat -A " << IP;
			cout <<"Die eingegebene IP lautet: "<< IP << endl;
			system(ns.str().c_str());
			system(nb.str().c_str());
			getch();
			}
			break;
			
			case '2':
			{
			cout <<"von Schnitzel";
			getch();
			}
			break;
			
			case '3':
			{
			cout <<"Programm wird beendet";
			getch();
			}
			break;
		}
		
		getchar();
		system("cls");
		
	}
	while (auswahl =3);

	cin.ignore();
	return 0;
}
 

Anhänge

  • Fehlermeldung.jpg
    Fehlermeldung.jpg
    59,8 KB · Aufrufe: 155
Zuletzt bearbeitet:
Also bei mir funktioniert der Code, sicher dass deine Eingabe richtig ist?
test.png
 
Als IP gebe ich einfach z.B. 192.169.17.121 ein und drücke auf Enter.

Edit:

OK, bei mir zushause funktioniert es auch ohne Probleme!
Das heißt, es liegt an der alten Krücke in der Arbeit.
Dann bin ich doch nicht so doff, wie ich zu Anfang dachte. ^^
 
Zuletzt bearbeitet:
Zurück
Oben