Berechnung des Flächeninhalts - Probleme wenn Buchstaben eingegeben werden

Benkso

Grünschnabel
Guten Tag zusammen,

möchte mich erstmal bei Euch vorstellen, da ich neu in diesem Forum bin. Ich bin derzeit an meiner Bachelorarbeit dran und habe im Studium keine Programmiersprachen gelernt (Maschinenbaustudent). Da ich aber nun ein tool herstellen möchte, habe ich gestern Angefangen mich in C einzuarbeiten und habe ein Problem wobei ich nicht weiter komme :(

Ahja ich arbeit mit Visual Studio 8 Express

Also ich möchte ganz einfach die Fläche eines rechteckes berechnen.


Am Anfang kommt die Frage ob die Fläche berechnet werden soll: JA - J oder Nein - N
Wenn (N) gedrückt wird, schliesst sich das Programm
Wenn (J) gedrückt wird, wird es fortgefahren
Wenn etwas anderes Gedrückt wird, kommt eine Fehlermeldung das nur J und N möglich sind.
Alles soweit und gut+

Dann wird die Länge abgefragt und Breite.....

Wenn Zahlen eingegeben werden, klappt es ohne weiteres aber wenn ein Buchstabe eingetippt wird rasselt das ding einfach durch ohne ende^^
Habe dann versucht es zu beeben siehe Zeile 14 - 19 aber dann nur Probleme

- Gebe ich eine Zahl ein, Kommt dennoch eine Warnmeldung und die Breite wird abgefragt und das Ergebnis ausgespuckt.
- Gebe ich ein Buchstabe ein, kommt die Warnmeldung (sollte auch so sein) und für die Länge wir 0 angenommen
- Habe ich aber schon einmal die Länge eingegeben z.B. mit 5 dann Breite 6, kommt das Ergebnis normal raus. Wenn ich die Berechnung nochmal aber mache und für die Länge ein buchstabe eingebe, dann wird der vorherige Wert übernommen, sprich die 5

Gerne hätte ich aber, wenn ein buchstabe eingetippt worden ist, dass die Länge wieder abgefragt wird.

Hoffe ich konnte mein Problem soweit verständlich beschreiben und hoffe Ihr seit mir nicht böse wenn ich dieses Thema nochmal frage. Habe viele Beitrage gefunden mit dem gleichen Problem aber leider komme ich immer noch nicht weiter :(

Code:
#include "iostream"
using namespace std;

int Laenge, Breite, f;

void text()
{

	cout << "\nBitte Rechteckseiten eingeben \n";

	cout << "Laenge = "; 

	cin >> Laenge;
	if (!cin.bad())
{ 
		cerr<<"\nNur Zahlen zulaessig!\n";
		cin.clear();
		fflush(stdin);
}		
	

	cout << "Breite = "; 

	cin >> Breite;

	f = Laenge * Breite;

	cout << "\nDer Flaecheninhalt betraegt\n" << f;

	cout << endl;
}

int main()
{
	char Antwort;
	while (true)
{

cout<<"\nWillst du den Flaecheninhalt eines Rechteckes berechen?\n\n Ja - J		Nein - N\n"<<endl;
            cin>>Antwort;
            if (Antwort == 'n' || Antwort == 'N')
{
	           break;

} else if(Antwort == 'j' || Antwort == 'J')
{
	           text();
} else
{
	           cout<<"\nAntwort ungueltig\nEs sind nur die Tasten J und N aktiv\nalle anderen Tasten werden ignoriert\n"<<endl;
}
}

return 0;
}




Danke vielmals Leute+

Gruss

Benni

kleine ergänzung:

Habe das bei Zeile 14-19 nur für dei Länge versucht. Mag das dann auch für die Breite machen. Ist ja dann gleiches Prinzip aber nur das Ihr wisst da was fehlt.....
 
Hi und Willkommen bei tutorials.de,

Benkso hat gesagt.:
habe im Studium keine Programmiersprachen gelernt...
habe ich gestern Angefangen mich in C einzuarbeiten
Nur interessehalber: Wie bist du auf C gekommen?
Vorgegeben in der Aufgabe? Oder...?
Benkso hat gesagt.:
Ahja ich arbeit mit Visual Studio 8 Express
2008 oder wirklich Nummer 8 (wäre 2005)?


Zum Code
Soll es C oder C++ sein?

Beim iostream-include oben sind < > schöner als " "

Die Variablen Laenge/Breite/f: Wenn man globale Variablen wie diese vermeiden kann
sollte man es auch tun.
Die werden sowieso nur in text() gebraucht, also mach sie doch dort
(so wie Antwort innerhalb von main ist).
(uch, wenn sie in mehreren Funktionen gebraucht werden kann man das mit Parametern lösen)

main und text:
Mach doch bitte ordentliche Zeileneinrückungen. Das da ist Chaos.
Sonst schauts gut aus (bis auf die Problemstelle)


Zum eigentlichen Problemteil:
Statt den Zeilen 13-19 sowas:
C++:
do {
	if(!(cin >> Laenge)) {
		cout << "Falscheingabe\n";
		cin.clear();
		cin.ignore(INT_MAX, '\n');
		Laenge = -1;
	}
} while(Laenge < 0);
Prüft auch gleichzeitig, ob der Wert kleiner 0 ist (was eine Länge/Breite ja nicht sein sollte)
 
Vielen Dank für deine schnelle Antwort!! Hat mich schon weiter gebracht!

Zur deinen ersten Frage:
Ich bin darauf gekommen, da man in Matlab Simulink ein C code einfügen kann und somit ich mein eigenen Block herstellen kann . Da ich zur überprüfung mehrere Signale ein tool benötige, habe ich die Aufgabe von meinem Betreuer bekommen mcih in der Sprache einzuarbeiten.

Dann,

Ich meinte Visual C++ 2008 Express Edition

Habe jetzt dennoch noch ein paar fragen:

Kannst du mir kurz erklären die Funktionsweise dieser drei Befehle?

1. !(cin >> Laenge)

2. cin.ignore(INT_MAX, '\n');

3. Laenge = -1;


Und nun wollte ich Euch noch fragen, wie ich es realisieren kann, dass ich mit dem Ergebnis f weiter rechnen kann. Umrechnung von mm in m

--> Hat sich erledigt! Habe ganz am Anfang int zu float geändert

Hier jetzt mein aktueller Code

HTML:
#include <iostream>
using namespace std;

void text(){

int Laenge, Breite, f, f1, f2, f3;

	cout << "\nBitte Rechteckseiten eingeben (in mm) \n";
	cout << "Laenge = "; 

do {
    if(!(cin >> Laenge)) {
        cerr << "Nur Zahlen zulaessig, ausser 0!\n";
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        Laenge = -1;
		cout << "Laenge = "; 

	}else if(Laenge==0){
		cerr << "Die Laenge kann bei der bestimmung der Flaeche nicht 0 sein!\n";
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        Laenge = -1;
		cout << "Laenge = ";
	}
} while(Laenge < 0);


	cout << "Breite = "; 

do {
    if(!(cin >> Breite)) {
        cerr << "Nur Zahlen zulaessig, ausser 0!\n";
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        Breite = -1;
		cout << "Breite = "; 

	}else if(Breite==0){
		cerr << "Die Breite kann bei der bestimmung der Flaeche nicht 0 sein!\n";
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        Breite = -1;
		cout << "Breite = ";
	}
} while(Breite < 0);


	cout << "\nDer Flaecheninhalt betraegt\n\n";
	f = Laenge * Breite;
	f1 = f /100;
	f2 = f1/100;
	f3 = f2/100;
	cout <<"	" << f << "	mm^2\n";
	cout <<"	" << f1 << "	cm^2\n";
	cout <<"	" << f2 << "	dm^2\n";
	cout <<"	" << f3 << "	m^2\n";
	cout <<"	" << endl;
}

int main(){

char Antwort;
while (true){

		cout<<"\nWillst du den Flaecheninhalt eines Rechteckes berechnen?\n\n Ja - J		Nein - N\n"<<endl;
		cin>>Antwort;

    if (Antwort == 'n' || Antwort == 'N'){
	break;
} 
	else if(Antwort == 'j' || Antwort == 'J'){
		text();
} 
	else{
		cout<<"\nAntwort ungueltig\nEs sind nur die Tasten J und N aktiv\nalle anderen Tasten werden ignoriert\n"<<endl;
}
}

return 0;
}



Vielen Dank!++

Benni
 
Zuletzt bearbeitet:
Zurück