Moin, ihr erinnert euch vielleicht noch an mein C++ Motorprojekt.
Es ist so, dass der Nutzer eine 0 oder 1 für die Laufrichtung des Motors eingibt. Ich habe hier 2 Probleme:
1.) Ich kenne keinen C++-Befehl für eine Funktion, die solch einen Wert zurückgibt, der auf einen Fehler schließen lässt. Ich musste leider hernehmen; und falls dummy == 0 ist 'was schiefgelaufen.
2.) Irgendetwas scheint da nicht aktualisiert zu werden, weil wenn ein Durchlauf erfolgreich war und der Benutzer nun erneut die Richtung eingeben soll und ich ,,,,, eingebe, bleibt
hier der gesamte Code:
im Main
Motor.h
motor.cpp
Es ist so, dass der Nutzer eine 0 oder 1 für die Laufrichtung des Motors eingibt. Ich habe hier 2 Probleme:
1.) Ich kenne keinen C++-Befehl für eine Funktion, die solch einen Wert zurückgibt, der auf einen Fehler schließen lässt. Ich musste leider hernehmen; und falls dummy == 0 ist 'was schiefgelaufen.
2.) Irgendetwas scheint da nicht aktualisiert zu werden, weil wenn ein Durchlauf erfolgreich war und der Benutzer nun erneut die Richtung eingeben soll und ich ,,,,, eingebe, bleibt
Richt
auf 0 (statt -1), obwohl in der Funktion Richtung()
-1 returnt wurde.hier der gesamte Code:
im Main
Motor.h
C-Quellcode
- #ifndef MOTOR_H_
- #define MOTOR_H_
- class Motor
- {
- private:
- int Richt = -1;
- double dFahrstrecke = 0.0;
- double d_mm_pro_Umdrehungen = 2.0;
- double d_Schritte_pro_Umdrehung = 800.0;
- public:
- int Richtung();
- int Eingabe_und_Berechnung();
- int Schritte = 0;
- void verfahren(int Schritte);
- bool hat_geklappt = false;
- void Bewertung(bool Bewert);
- };
- #endif // !MOTOR_H_
motor.cpp
C-Quellcode
- #include "Motor.h"
- #include <iostream>
- #include <cmath>
- #pragma warning(disable : 4996) //wegen scanf. Visual Studio will scanf_s sehen.
- int Motor::Richtung()
- {
- std::cout << "vorw\x84 \brts: 0; zur\x81 \bck: 1" << std::endl;
- //std::cin >> Richt;
- int dummy = scanf("%d", &Richt);
- if (dummy == 0)
- {
- std::cout << "falsche Eingabe" << std::endl;
- setvbuf(stdin, NULL, _IONBF, 0);
- setvbuf(stdin, NULL, _IONBF, BUFSIZ);
- return -1;
- }
- switch (Richt)
- {
- case 0:
- return 0;
- break;
- case 1:
- return 1;
- break;
- default:
- return -1;
- break;
- }
- }
- int Motor::Eingabe_und_Berechnung()
- {
- if (Richt == 0 || Richt == 1) //HIER
- {
- std::cout << "Fahrweg [mm] eingeben:" << std::endl;
- std::cin >> dFahrstrecke;
- if (dFahrstrecke < 0)
- {
- Schritte = 0;
- }
- else
- {
- Schritte = static_cast<int>(std::round(dFahrstrecke / d_mm_pro_Umdrehungen * d_Schritte_pro_Umdrehung)); // mm÷(mm÷U) * S÷U = S
- }
- return Schritte;
- }
- else
- {
- Schritte = 0;
- return Schritte;
- }
- }
An die Neulinge: Nutzt
Option Strict On
und Option Infer Off
. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()