WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Wo liegt der Fehler im C++ Code? (http://www.wcm.at/forum/showthread.php?t=112618)

Groovy 19.10.2003 02:05

Wo liegt der Fehler im C++ Code?
 
Zitat:

#include <iostream.h>


int main() {

double x;

cout<<"Geben Sie eine Zahl ein\n";
cin>>x;

if ((x%1)==0)
cout<<x<<" ist eine ganze Zahl\n";
else
cout<<x<<" ist keine ganze Zahl\n";

}
Also das einfache Prog soll erkennen, ob es sich um eine ganze Zahl handelt oder nicht.
Aber leider kann der Compiler das nicht verarbeiten. :heul:
Der % Operator ist der Restklassen Operator.


Fehlermeldung:
"invalid operands `double' and `int' to binary `operator %"

Was mach ich falsch?
Bitte nicht schimpfen, wenn es nur ein blöder Fehler ist.

pong 19.10.2003 09:54

Nur so nebenbei, wenn man schon einen Rückgabewert angibt, dann sollte man auch etwas zurückgeben

pong

Chrisi99 19.10.2003 10:04

sonst "void main void" ....

rollipolli 19.10.2003 11:17

..bist du dir sicher, das du % auf double anwenden kannst?!

..ich würd eher sagen, das % den Rest der division zweier Integer-Werte liefert..

_m3 19.10.2003 11:31

:ja:

Groovy 19.10.2003 11:43

Hmm wieso kann man double nicht mit modulo anwenden?

@pong
meinst du das mit return 0?
Ich dachte das macht der Compiler automatisch?

_m3 19.10.2003 12:11

Der Modulo-Operator ist nur fuer Integer-Zahlen definiert, wie man den entsprechenden Unterlagen entnehmen kann.

Groovy 19.10.2003 12:12

Na toll... :heul:
Muss mir dann was anderes einfallen lassen.

Trotzdem Danke an Euch!

Stona 19.10.2003 20:51

wenn du den wert an einer anderen stelle als double brauchts mach halt einen cast auf int, um den modulo zu verwenden


double x;


if (((int)x%1) == 0)

....

Groovy 21.10.2003 22:17

ich hab's nun anders gelöst...
Auf Modulo hab ich ganz verzichtet und stattdessen hab ich double vom int subtrahiert.
Falls 0 = ganze Zahl, sonst keine Ganze Zahl.

#include <iostream.h>



int main()
{
double a;

cout<<"Geben sie eine Zahl ein";
cin>>a;

if (a- int(a)==0)
cout<<"Ganze Zahl ";
else
cout<<"keine ganze Zahl ";
}

premm 23.10.2003 08:09

Leider stimmt das nicht ganz !
 
int 2Byte -+32768
long 4Byte -+2147483648
double 8Byte ±1.8·10e308

Das heist dein Code funktioniert nur für einen Wertebereich von
+-32768

irrsinn 23.10.2003 09:02

kommt drauf an:

rein auf verdacht würd ich sagen, dass die int() funktion einen long zurückliefert. dann gehts ohne probleme.

auswendig weiß ichs aber net und find grad nix gscheites zum nachschaun

Flink 23.10.2003 11:15

Warum liest du die Eingabe nicht einfach in einen String und siehst nach, ob du ein Komma darin findest? :confused:
Mit sscanf kannst du die Zahl dann wieder in ein double einlesen.
Double-Zahlen sind ungenau. 0.9999999 könnte 1 bedeuten.

premm 23.10.2003 16:13

Zitat:

Original geschrieben von irrsinn
kommt drauf an:

rein auf verdacht würd ich sagen, dass die int() funktion einen long zurückliefert. dann gehts ohne probleme.

auswendig weiß ichs aber net und find grad nix gscheites zum nachschaun

int ist keine Funktion und auch kein Objekt, int ist ein einfacher Datentyp, der je nach System anderes definiert ist, meist jedoch 2 Byte also von -32767 -> 32768, long mit 4 Byte.

#include <cmath>
#include <iostream.h>

int main()
{
double a;

cout<<"Geben sie eine Zahl ein";
cin>>a;

if (a == floor(a))
cout<<"Ganze Zahl ";
else
cout<<"keine ganze Zahl ";
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag