Software > Programmieren und Coding

[C++] Abfragen, ob eine Floatzahl eingegeben wurde

(1/3) > >>

Zeh Emm:
Moinsen.

Wir sollen für die Uni ein Programm schreiben, welches das kgV und den ggT zweier Integerzahlen ermittelt.

Nun möchte ich aber nach der Eingabe einer Float-Zahl, dass abgebrochen wird. Das tut es nur bedingt.

Einerseits wird ausgegeben, dass die Zahl nicht im Definitionsbereich liegt, was auch richtig ist. Andererseits wird aber ein cout noch mit ausgegeben, was eigentlich nciht vorkommen sollte.

Hat einer eine Idee?


--- Code: ---#include <stdio.h>
#include <iostream.h>

int ggt( int m, int n){
if (n == 0){
return m;
}
else{
return ggt(n,m%n);
}
return m;
}

int kgv(int m, int n){
return( m*n/ggt(m,n) );
}

int main(){
int n=0;
cout<<"Bitte geben Sie die erste Zahl >0 ein:\n";
cin>>n;
//hier müsste eine Abfrage rein, ob n ein int ist oder nicht ansonsten -->break
int m=0;
cout<<"Bitte geben Sie die zweite Zahl >0 ein:\n";
cin>>m;

if(m>0 && n >0){
cout<<"Das kgV lautet: "<<kgv(m,n)<<endl;
cout<<"Der ggT lautet: "<<ggt(m,n)<<endl;
}
else{
cout<<" Mindestens eine der Eingaben ist nicht aus dem natuerlichen Zahlenbereich\n";
}
return 0;
}
/
--- Ende Code ---

Die Ausgabe ist Folgende
--- Zitat ---claas@claas-linux:~/Desktop/1$ ./ggt
Bitte geben Sie die erste Zahl >0 ein:
111.456
Bitte geben Sie die zweite Zahl >0 ein:<-- Soll nicht erscheinen
 Mindestens eine der Eingaben ist nicht aus dem natuerlichen Zahlenbereich
claas@claas-linux:~/Desktop/1$
--- Ende Zitat ---

nemon:
als string einlesen und zeichen für zeichen vergleichen, ob es eine ziffer ist, wenn nicht, dann abbruch. wenn es passt, in einen integer wandeln. hab sowas mal als "sichere" methode in delphi geschrieben, mit allen prüfungen ca. 100 zeilen code

Gargamel:

--- Code: ---int main(){
int n=0;
cout<<"Bitte geben Sie die erste Zahl >0 ein:\n";
cin>>n;
//hier müsste eine Abfrage rein, ob n ein int ist oder nicht ansonsten -->break
        if(n>0){
            int m=0;
            cout<<"Bitte geben Sie die zweite Zahl >0 ein:\n";
            cin>>m;

            if(m>0){
cout<<"Das kgV lautet: "<<kgv(m,n)<<endl;
cout<<"Der ggT lautet: "<<ggt(m,n)<<endl;
                return 0;
            }
        }
cout<<" Mindestens eine der Eingaben ist nicht aus dem natuerlichen Zahlenbereich\n";
return 1;
}

--- Ende Code ---
@Class: so?

Ich gehe jetzt einfach mal davon aus, dass das "cin>>n" die Überprüfung übernimmt, ob es sich bei der Eingabe um einen Integer handelt. Soo genau kenne ich mich nicht mit C++ aus. Ansonsten - siehe nemons Vorschlag. Das könnte man dann auch gleich noch mit Exceptions koppeln, um die Fehlerbehandlung eleganter abhandeln zu können. ;)

nemon:
ich weiß nicht, wie c++ es handhabt, aber im prinzip werden ja bytes aus dem tastaturpuffer in die variable geschoben. wenn du nun "buchstaben", welche ja eigentlich ein byte sind, da reinschiebst, kannst du aus 4 buchstaben einen int32 zusammenbasteln, also wenn da kein fehlerabfang hintersteckt, kann ein cin>>n auch funktionieren, wenn cin ABCD beinhaltet, dann müsste n 1094861636 werden. damit würde dein programm weiterrechnen. zwar bin ich mir hierbei nicht sicher, da aber bekannt ist, dass in c++ fehlerabfangmäßig kaum etwas implementiert ist, halte ich es für gut möglich. sag doch mal 'a'>>n und lass dir n als integer formatiert ausgeben

Zeh Emm:
@Gargamel: Danke aber der spuckt wie vorher aus, dass ich die zweite Zahl eingeben soll.
Mir kam aber gerade die Idee m und n als floats einzulesen und dann mal zu gucken, ob in der Zeichenkette ein . enthalten ist oder nciht. Wenn ja, dann soll abgebrochen werden ansonsten weitermachen.

Nur habe ich bei meiner Suche nur merkwürdige Snippets gefunden, mit denen ich nichts anfangen kann bzw Lösungen, die auf die Installation weiterer Bibliotheken zurückgreift und ich bin mir nciht sicher, ob ich am Unirechner Sachen installieren kann.

Hat einer von euch evtl ein kurzes Snippet, mit dem man sich das zurechtbasteln kann?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln