Bug bei Anfängerprogramm

Ðavid

Cadet 2nd Year
Registriert
Okt. 2007
Beiträge
20
Hi Leute,

ich habe gerade angefangen, mich in C++ einzuarbeiten. In dem Onlinebuch mit dem ich arbeite, steht folgende Aufgabe:

Entwickeln Sie eine C++-Anwendung, die den Anwender zur Eingabe von drei Zahlen auffordert. Das Programm soll den Wert 10 zur ersten eingegebenen Zahl hinzuaddieren, das Ergebnis mit der zweiten eingegebenen Zahl multiplizieren und dann durch die dritte eingegebene Zahl dividieren. Die Berechnung soll hierbei innerhalb einer einzigen Code-Zeile erfolgen. Das Ergebnis soll auf den Bildschirm ausgegeben werden. Hinweis: Zum Umwandeln einer Zahl innerhalb eines Arrays vom Typ char benötigen Sie die Funktion atoi(). Dieser Funktion übergeben Sie das Array zwischen den runden Klammern und erhalten als Rückgabewert eine Zahl vom Typ int.

Ich habe folgendes programmiert und bekomme aber nach Ausführen des Programms nicht das geforderte Rechenprogramm. Es kommt zwar die erste Aufforderung, eine Zahl anzugeben, danach wenn ich z.b. 5 und dann enter drücke, kommen beide folgenden cout Meldungen nacheinander und nach Eingabe einer zweiten Zahl endetdas Programm mit einem komischen Ergebnis.

Kann jemand helfen und weiß woran es liegt?

Vielen Dank!

#include <iostream>

int main()
{
char a[3], b;
std::cout << "Gib eine Zahl ein " << std::endl;
std::cin.get(a[0]);
std::cout << "noch eine... " << std::endl;
std::cin.get(a[1]);
std::cout << "und die letzte... " << std::endl;
std::cin.get(a[2]);
b = ((a[0] + 10) * a[1] / a[2]);
std::cout << "Das Ergebnis ist " << static_cast<int>(b) << std::endl;
}
 
Und wo verwendest du die Funktion "atoi"?
Wass passiert wenn du folgendes machst:

Code:
#include <iostream>

int main()
{
  char a[3];
  int b;
  std::cout << "Gib eine Zahl ein " << std::endl;
  std::cin.get(a[0]);
  std::cout << "noch eine... " << std::endl;
  std::cin.get(a[1]);
  std::cout << "und die letzte... " << std::endl;
  std::cin.get(a[2]);
  b = ((atoi(a[0]) + 10) * atoi(a[1]) / atoi(a[2]));
  std::cout << "Das Ergebnis ist " << b << std::endl;
}
 
naja, der Hinweis, mit atoi() könne man Arrays in Integer umwandeln, bezieht sich eher auf die Eingabestrings, welche in der Regel vom Typ Char Array sein sollten. Diese würde man dann Eingabe für Eingabe in Integer umwandeln und anschließend die Berechnung durchführen?
 
Also, ich würde folgendes tun:
1. Datentyp aller Zahlen z.b. int statt char nehmen (sonst ist zu früh Schluss :P)
2. Statt cin.get(a[0]) lieber cin >> a[0] benutzen
3. Damit das Ergebnis auch genauer wird, Gleitkommazahl dafür benutzen (double)
4. Da das dauernde std:: nervt, schnell noch den Namespace std festlegen :P

Zu 2.: Soweit ich weiß, ist cin.get hier total fehl am Platze, da es nur EIN char-zeichen einliest, und es in ein char umwandelt. Allerdings ist das Zeichen '2' als char nicht 2!
Berichtigt mich wenn das nicht stimmt :), hab lange kein c++ mehr gemacht


Das sollte funktionieren (ganz ohne atio und so):

Code:
#include <iostream>

using namespace std;  //ab jetzt ist std:: standard, also kann mans weglassen

int main()
{
int a[3];
double b;

cout << "Gib eine Zahl ein " << endl;
cin >> a[0];
cout << "noch eine... " << endl;
cin >> a[1];
cout << "und die letzte... " << endl;
cin >> a[2];
b = ((a[0] + 10) * a[1] / (double)a[2]);      // (double)-cast muss rein, da sonst Integer-division stattfindet(runden)
cout << "Das Ergebnis ist " << b << endl;

system("pause");   //"Drücken sie beliebige Taste um fortzusetzen"
}

Kann sein dass ich bissl übers Ziel hinausgeschossen bin :o
 
also ich glaub auch das cin.get für ein Teil des Problems verantwortlich ist-
ich probier es nochmal mit den tipps von euch, vielen Dank dafür!
 
Ich denke nicht dass cin.get verantwortlich ist sondern dein implizierter Cast von Char auf Byte/Int... wie schon gesagt, die Taste 2 und der Wert 2 sind unterschiedliche Dinge...
char c = '2';
byte b = c;
b wird dann nicht 2 sein, sondern 50 (oder 0x32)...

Und da es sich um vermutlich eine Übungsaufgabe handelt würde ich dir raten so nahe an deiner eigenen Lösungzu bleiben wie möglich...
 
Zurück
Oben