Char zu Double
-
mit dieser Funktion wollte ich erreichen, dass der Char[]-parameter als double zurückgegeben wird. allerdings wird bei Funktionsaufruf immer in int konvertiert...
Error: (in den folgenden zeilen wird die Funktion mit einem Char Array aufgerufen:)1>pytagora.cpp(85): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust 1>pytagora.cpp(91): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust 1>pytagora.cpp(97): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust 1>pytagora.cpp(103): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust 1>pytagora.cpp(110): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust 1>pytagora.cpp(117): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
if (conv_CtD(Ckatheter1)) { x = 1; } else { katheter2 = conv_CtD(Ckatheter2); } if (conv_CtD(Ckatheter2)) { x = 2; } else { katheter1 = conv_CtD(Ckatheter1); } if (conv_CtD(Ckatheter1)) { x = 3; } else { hypotenuse = conv_CtD(Chypotenuse); }
**
Funktion:**double conv_CtD (char Char[]) { double New; double durch = 1.0; bool actdurch = false; double mal = 10.0; int tempnew; for (int i = 0 ; i < 255; i++) { if (Char[i] <= '0'|| Char[i] >= '9' ) { if (Char[i] == ',') { actdurch = true, mal = 1; } else { return 1; //1 wird zurückgegeben, wenn der Parameter keine Zahl ist } } else { tempnew = Char[i]; if (actdurch == true) { durch = durch*10; } New = New * mal + (tempnew - '0') / durch; } } return New; }
-
Hat es einen Grund, warum du nicht die konventionellen Lösungen nutzt?
-
Ich wusste nichs davon -.-
und ich war zu dumm nach string zu suchen *shame on me* xD
Edit: Allerdings muss ich wissen ob das eingegebene eine Zahl oder ein Buchstabe ist
aber dafür kann ich ja eine andere funktion schreiben.
Hmm aber ich würde trotzdem gerne wissen warum dass nicht klappt also: wennn jemandem ein Fehler ins Auge springt, nicht Zurückhalten
-
DarkscrollZ schrieb:
Edit: Allerdings muss ich wissen ob das eingegebene eine Zahl oder ein Buchstabe ist
Das macht dir auch der stringstream.
double conv_CtD(char * Char) { std::stringstream s(Char); double d; if (s >> d) return d; throw "keine Zahl"; }
-
Irgendwie Logisch
-
hrmpf irgendwas geht immer bei der sqrt() funktion schief...
if (Kat1 >> Ckatheter1) { Kat1 << Ckatheter1; Kat1 >> katheter1; } else { x = 1; } if (Kat2 >> Ckatheter2) { Kat2 << Ckatheter2; Kat2 >> katheter2; } else { x = 2; } if (Hyp >> Chypotenuse) { Hyp << Chypotenuse; Hyp >> hypotenuse; } else { x = 3; } if (x == 1) { rechnung = hypotenuse^2 - katheter2^2; katheter1 = sqrt(rechnung); Dlprint("X ist: "); cout << katheter1; Dlprint("!"); } if (x == 2) { rechnung = hypotenuse^2 - katheter1^2; katheter2 = sqrt(rechnung); Dlprint("X ist: "); cout << katheter2; Dlprint("!"); } if (x == 3) { rechnung = (katheter1*katheter1) + (katheter2*katheter2); hypotenuse = sqrt(rechnung); Dlprint("X ist: "); cout << hypotenuse ; Dlprint("!"); }
1>pytagora.cpp(122): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust 1>pytagora.cpp(129): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust 1>pytagora.cpp(136): warning C4244: '=': Konvertierung von 'long double' in 'int', möglicher Datenverlust
PS: ich weiß dass es Kathete und nicht Katheter heißt
-
BTW: Wenn Du glaubst, dass hypotenuse^2 das Quadrat der Hypothenuse errechnet, dann irrst Du aber gewaltig...
Wie wäre es mal mit einem Grundlagen Tutorial?
-
ups... Stimmt ich hab nie was von einem ^-zeichen in c++ gehört
aber ich habe das "^2" jetzt durch hypotenuse*hypotenuse ersetzt und diese Warnung kommt immernoch
Edit: wer will kann meinen Source-code gern haben
is ja nichts großes
-
BTW: Wenn du glaubst, dass Katheter die Kathete eines Dreiecks ist, dann irrst Du aber gewaltig...
Das sieht alles ziemlich wirr aus, z.B. das sinnlose Bitshifting in´s Nirvana.
Irgendwie habe ich den Eindruck, dass du einen Codeschnipsel einer anderen Programmiersprache nach C++ portieren willst, ohne C++ zu können. Ich kann mich Martin nur anschließen, besorg´ dir ein vernünftiges C++ Grundlagenbuch und arbeite es durch. Es gibt einige gute Bücher als kostenlose EBooks, die müssten über die Suche hier im Forum zu finden sein (und hüte dich vor J.W. :p).Edit:
Hm, vielleicht ist da ja doch kein Bitshifting, was bitte sind Kat1, Kat2 und Hyp?
-
Ich bin noch blutiger anfänger in c++
Ich habe mir vor einiger Zeit "Einstieg in C++" von Arnold Willemer (Galileo Computing) besorgt und arbeite es zurzeit durch. Ich schicke euch mal den gesammten Code (ich habe Katheter in Kathete geändert):// pytagora.cpp: Hauptprojektdatei. #include "stdafx.h" #include <math.h> #include <iostream> #include "Dlprint.h" #include <Windows.h> #include <sstream> #include <string> using namespace System; using namespace std; //double conv_CtD (char Char[]) //{ // double New; // double durch = 1.0; // bool actdurch = false; // double mal = 10.0; // int tempnew; // for (int i = 0 ; i < 255; i++) // { // if (Char[i] <= '0'|| Char[i] >= '9' ) //ascII code für die Zahlen // { // if (Char[i] == ',') //ASCII code für das Komma // { // actdurch = true, // mal = 1; // } // else // { // return 1; // } // } // // else // { // tempnew = Char[i]; // if (actdurch == true) // { // durch = durch*10; // } // New = New * mal + (tempnew - '0') / durch; // } // } // // return New; // //} double check_CtD(char * Char) { std::stringstream s(Char); double d; if (s >> d) return d; throw "keine Zahl"; } int main(array<System::String ^> ^args) { char Ckathete1[255]; char Ckathete2[255]; char Chypotenuse[255]; long double rechnung; for (int i = 0;i <= 255; i++) //Char-Arrays sichern { Ckathete1[i] =0; Ckathete2[i] =0; Chypotenuse[i] =0; } int x=0; int kathete1=0; int kathete2=0; int hypotenuse=0; Dlprinttl("Mit diesem Programm kann man eine unbekannte Seite eines Dreiecks ausrechnen!", 50); Dlprinttl("Den Wert den du NICHT weisst muss 'X' oder 'x' sein!!!",50); cout << endl; Dlprintt("erster kathete:", 40); cin >> Ckathete1; Dlprintt("zweiter kathete:", 40); cin >> Ckathete2; Dlprintt("hypotenuse:", 40); cin >> Chypotenuse; stringstream Kat1(Ckathete1); stringstream Kat2(Ckathete2); stringstream Hyp(Chypotenuse); if (Kat1 >> Ckathete1) { Kat1 << Ckathete1; Kat1 >> kathete1; } else { x = 1; } if (Kat2 >> Ckathete2) { Kat2 << Ckathete2; Kat2 >> kathete2; } else { x = 2; } if (Hyp >> Chypotenuse) { Hyp << Chypotenuse; Hyp >> hypotenuse; } else { x = 3; } if (x == 1) { rechnung = hypotenuse*hypotenuse - kathete2*kathete2; kathete1 = sqrt(rechnung); Dlprint("X ist: "); cout << kathete1; Dlprint("!"); } if (x == 2) { rechnung = hypotenuse*hypotenuse - kathete1*kathete1; kathete2 = sqrt(rechnung); Dlprint("X ist: "); cout << kathete2; Dlprint("!"); } if (x == 3) { rechnung = (kathete1*kathete1) + (kathete2*kathete2); hypotenuse = sqrt(rechnung); Dlprint("X ist: "); cout << hypotenuse ; Dlprint("!"); } system("pause"); return 0; }
Das Auskomentierte war mein ursprünglicher versuch char zu int zu konvertieren ;/
Dlprint ist nur eine Funktion die Text buchstabe für buchstabe ausgibt:
#include <iostream> #include <Windows.h> using namespace std; void Dlprint(char text[1000]) //gibt "text" aus (standardgeschwindigkeit 75) { for (int i=0; text[i] && i < 1000; i++) { cout << text[i]; Sleep(75); } } void Dlprintt(char text[1000], int sleep) //gibt "text" aus (standardgeschwindigkeit 75) { if (sleep <= 0) { sleep=75; //standardgeschwindigkeit } for (int i=0; text[i] && i <1000; i++) { cout << text[i]; Sleep(sleep); } } void Dlprintl(char text[1000]) //gibt "text" aus (standardgeschwindigkeit 75) { for (int i=0; text[i] && i < 1000; i++) { cout << text[i]; Sleep(75); } cout << endl; } void Dlprinttl(char text[1000], int sleep) //gibt "text" aus (standardgeschwindigkeit 75) { if (sleep <= 0) { sleep=75; //standardgeschwindigkeit } for (int i=0; text[i] && i <1000; i++) { cout << text[i]; Sleep(sleep); } cout << endl; }
PS: Ich bin 15 Jahre alt und versuche c++ zu lernen, als übung versuche ich immer das jeweilige thema in mathe umzusetzen
PPS: Ich interreesiere mich vorallem für Spieleprogrammierung und finde den "faden" dazu nicht
Ich weiß, dass ich dazu ersteinmal die Grundlagen kennen sollte, aber ich finde einfach keine Tutorials die über den "Einstieg" gehen...
falls jemand einen Tipp hat, nur zuAch ja, gibt es hier Spoiler? ich fände es dann übersichtlicher
-
DocShoe schrieb:
BTW: Wenn du glaubst, dass Katheter die Kathete eines Dreiecks ist, dann irrst Du aber gewaltig...
Das sieht alles ziemlich wirr aus, z.B. das sinnlose Bitshifting in´s Nirvana.
Irgendwie habe ich den Eindruck, dass du einen Codeschnipsel einer anderen Programmiersprache nach C++ portieren willst, ohne C++ zu können. Ich kann mich Martin nur anschließen, besorg´ dir ein vernünftiges C++ Grundlagenbuch und arbeite es durch. Es gibt einige gute Bücher als kostenlose EBooks, die müssten über die Suche hier im Forum zu finden sein (und hüte dich vor J.W. :p).Edit:
Hm, vielleicht ist da ja doch kein Bitshifting, was bitte sind Kat1, Kat2 und Hyp?Kat1, Kat2 und Hyp sind die Sringstreams, die ich zur konvertierung genutzt habe
EDIT: Ich hab jetzt ein neues Programm ganz ohne schriftzeichen geschrieben
// PYTAGORAA.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream> #include <Dlprint.h> #include <math.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { double kathete1=0; double kathete2=0; double hypotenuse=0; int A=5; int B=10; char check=0; system("color 3f"); for (bool exit=false;exit == false; system("cls")) { //prints Dlprinttl("mit diesem Programm kannst du eine \"unbekannte\" Seite eines Dreiecks ausrechnen!\nWICHTIG: benutze statt \",\" ein \".\".\n\n", A); Dlprintt("gebe die erste Kathete ein (wenn du sie nicht kennst gib \"0\" ein): ", B); cin >> kathete1; if (kathete1 > 0) { Dlprintt("gebe die zweite Kathete ein (wenn du sie nicht kennst gib \"0\" ein): ", B); cin >> kathete2; if (kathete2 > 0) { Dlprintt("gebe die Hypotenuse ein (wenn du sie nicht kennst gib \"0\" ein): ", B); cin >> hypotenuse; } else { Dlprintt("gebe die Hypotenuse ein: ", B); cin >> hypotenuse; } } else { Dlprintt("gebe die zweite Kathete ein: ", B); cin >> kathete2; Dlprintt("gebe die Hypotenuse ein: ", B); cin >> hypotenuse; } if (hypotenuse <= kathete1 || hypotenuse <= kathete2) { Dlprinttl("Error: die hypotenuse ist kleine als eine Kathete!",B); system("Pause"); continue; } if (kathete1 <= 0) { kathete1 = hypotenuse*hypotenuse - kathete2*kathete2; kathete1 = sqrt(kathete1); cout << "die erste kathete ist: " << kathete1 << endl; if (check == 'y') system("Pause"); } else { if (kathete2 <= 0) { kathete2 = hypotenuse*hypotenuse - kathete1*kathete1; kathete2 = sqrt(kathete2); cout << "die zweite kathete ist: " << kathete2 << endl; if (check == 'y') system("Pause"); } else { if (hypotenuse <= 0) { hypotenuse = kathete1*kathete1 + kathete2*kathete2; hypotenuse = sqrt(hypotenuse); cout << "die hypoenuse ist: " << hypotenuse << endl; if (check == 'y') system("Pause"); } else { Dlprinttl("Error: Alle Seiten sind bekannt!", B); system("Pause"); }}} A = 1; B = 1; if (check == 0) { Sleep(10); cout << "\n\nWillst du mehrmals rechnen? (y/n): "; cin >> check; if (check != 'y') {return 0;} } } return 0; }