c++ Wieso nimmt er nur ganze Zahlen an und wie löse ich das Problem?

5 Antworten

Computer haben 8-Bit oder 16-Bit oder 32-Bit oder 64-Bit ... Register.
Darin kann man nur ganze Zahlen 0 bis 255 , 0 bis 65536 , 0 bis 4294967296 oder ...
speichern.
Bei der Eingabe über eine Tastatur wird eine 0 als Hexadezimalzahl 30h , die 1 als 31h .... die 9 als 39h in die Variable Primzahl eingetragen. Ein Komma ist 2Ch.
Deine Prüfung if (Primzahl <=1) muss schief gehen, denn eine 1h kannst du mit cin
überhaupt nicht eingeben.

Die Eingabe von Zeichen und Zahlen muss erst einmal in ein char-Array (nicht in int oder double ) erfolgen, dort muss die Zahl ausgewertet werden, ein Komma ausgefiltert, die Zeichenkette vor dem Komma und nach dem Komma getrennt von ascii in hex umgewandelt werden. Das geht mit scan-Funktionen ....

Darf ich fragen, wofür du so ein Programm brauchst. Einem Hobby-Programmierer würde ich Tcl/Tk empfehlen. Da gibt es Funktionen, die solche Umwandlungen machen, ohne sie überhaupt im Programm schreiben zu müssen.

Tcl/Tk kann auch gleich mit grafischen Elementen benutzt werden. Als Rentner möchte ich solche Dinge, wie du sie aufführen willst, nie mehr in C oder C++ machen.

Bin etwas raus aus der Thematik aber ich könnte mir vorstellen, dass die Division mit einem interger das Problem ist, versuch 'Num' als double zu casten.


W00dp3ckr  18.12.2022, 15:22

Genau das :-)

2

Beschäftige mal mit dem Casten von Variablen und was passiert, wenn double und int geteilt wird.

Woher ich das weiß:eigene Erfahrung

Marwin388 
Beitragsersteller
 18.12.2022, 15:32

Ich weiß was das ist. Hat aber trotzdem nicht geklapt

0

Double geteilt durch INT ergibt INT das ist das Problem. Um es zu lösen kannst du num auch zu einem double machen oder alles auf Float ändern.

MFG

Woher ich das weiß:Studium / Ausbildung – Hochschulabschluss in Informatik (MSc)

Marwin388 
Beitragsersteller
 18.12.2022, 15:17

habe ich ja wie du oben siehst.

0
KaePie  18.12.2022, 15:29
@Marwin388

Hast du nicht.

Poste den Code mal als Text, ich tippe doch keinen Screenshot ab.

0
Marwin388 
Beitragsersteller
 18.12.2022, 15:31
@KaePie

#include<iostream>

using namespace std;

int main()

{

double Primzahl, Ergebniss;

cout << "Geben Sie ein Zahl an!:";

cin >> Primzahl;

if(Primzahl<=1)

{

cout << "falsche Eingabe!";

}

if(Primzahl>1)

{

cout << "richtige Eingabe\n";

for(double Num=1, Nummer;Num<=10;Num++)

{

Ergebniss= Primzahl / Num << "\n";

}

}

return 0;

}

0
KaePie  18.12.2022, 15:47
@Marwin388

Ergebniss= Primzahl / Num << "\n";

Was macht diese Zeile, oder was soll sie deiner Meinung nach tun?

double in einer for-Schleife ist sehr bedenklich.

1
KaePie  18.12.2022, 15:54
@Marwin388

Weil du nie weißt, wie ein spezieller Compiler optimiert und rundet.

1

Ich denke, alle Antworten hier sind falsch.

Meines Wissens nach, sollte in C++ die Division von double / int sehr wohl als double interpretiert werden.

Der Fehler liegt also wo anders. Oder es gibt gar keinen Fehler und du hattest nur "Pech", immer Ganzzahlen zu bekommen.

Ich glaube eher zweiteres, weil cin auch nicht automatisch castet.