c++ Wieso nimmt er nur ganze Zahlen an und wie löse ich das Problem?
Debugging
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.
Beschäftige mal mit dem Casten von Variablen und was passiert, wenn double und int geteilt wird.
Schau mal unter https://onlinegdb.com/P1HDpKjNV
Ich habe mal in einen Onlinecompiler geworfen.
Was soll dein Programm machen? Primzahlen findet es nicht.
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
#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;
}
Ergebniss= Primzahl / Num << "\n";
Was macht diese Zeile, oder was soll sie deiner Meinung nach tun?
double in einer for-Schleife ist sehr bedenklich.
Weil du nie weißt, wie ein spezieller Compiler optimiert und rundet.
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.
Ich weiß was das ist. Hat aber trotzdem nicht geklapt