Anfängerfehler Funktion / Switch

Guten Abend,

ich, ein blutiger C++ Anfänger, stehe vor einem für mich nicht verständlichen Fehler.

Ich hatte vor ein Programm zu schreiben, um eine bestimmte Anzahl von Tagen in Stunden, Minuten und Sekunden umrechnen zu lassen. (Eingabe: Anzahl Tage) 
Beispiel: 1 Tag hat 24 Stunden, das sind 1440 Minuten oder 86400 Sekunden.

Hier der Code:
#include <iostream>
using namespace std;

int main()
{
 int Sekunden;
 int Minuten;
 int Stunden;
 int Tage;
 int Jahre;
 
 int MinuteninSekunden(Minuten*60);
 int StundeninMinuten(Stunden*60);
 int TageinStunden(Tage*24);
 int JahreinTage(Tage*364);

 cout << " Was soll berechnet werden ?" << endl << „1 für Minuten“ << endl << „2 für  Stunden“ << endl << „3 für Tage“ << endl << „4 für Jahre“ << endl;
 cin >> eingabe;
 
switch(eingabe)
  {
   case 1:
    {
     cout << „wie viele Minuten willst du berechnen?“ << endl;
     cin >> Minuten;
     cout << Minuten << „Minuten haben“ << MinuteninSekunden <<„Sekunden“ << endl;
     break;
    }
   case 2:
    {
     cout << " wie viele Stunden willst berechnen?" << endl;
     cin >> Stunden;
     cout << Stunden << "Stunden haben " << StundeninMinuten << „Minuten“ << endl;
     break;
    }
   case 3:
    {
     cout << „wie viele Tage willst berechnen?“ << endl;
     cin >> Tage;
     cout << Tage << "Tage haben " << TageinStunden << „Stunden“ << endl;
     break;
    }
   case 4:
    {
     cout << „wie viele Jahre witlls berechnen?“ << endl;
     cin >> Jahre;
     cout << Jahre << „Jahre haben“ << JahreinTage << „Tage“ << endl;
     break;
    }
   default:
    {
     cout << „unzulässige Eingabe! Programm endet“ << endl;
     break;
    }
  }

 system(„pause“);
 return 0;

Wo liegt der Fehler?
Btw.: Jemand vielleicht eine gute Tutorial-Anlaufstelle zur Hand?

Vielen Dank und einen schönen Abend noch.
Grüßle
der Milchmann

Hallo

Auf die Schnelle (und ohne C++ Compiler zur Hand…) fehlen bei den Methoden die return-Anweisungen:

 int MinuteninSekunden(Minuten*60);

besser: int MinuteninSekunden(Minuten) { return (Minuten*60); }
usw…

Btw.: Jemand vielleicht eine gute Tutorial-Anlaufstelle zur
Hand?

Z.B. http://www.highscore.de/

Hallo Miclhmann89,

dann würde ich dir empfehlen bevor du anfängst zu programmieren ein entsprechendes C++ einsteigerbuch zu lesen, bzw. ein Online-Tutorial zu machen.

Zum Beispiel auch bei wikipedia:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung/…
Oder suchen nach „C++ Einführung“ oder „C++ Tutorial“.

Insbesondere ein Augenmerk auf den Bereich Funktionen und Methoden richten.
Und vor allem erst mal das Konzept von „Klassen“.

Und nur so nebenbei -> ein Jahr hat etwas mehr als 364 Tage :wink:

Gruss
alDER

lieber Frager
wenn Du fragst ,Wo ist der Fehler
und keine Fehlerbeschreibung deines Compilers
mitlieferst .
Dann empfehle ich mal den Kurs „Debug“ zu belegen .
Erstmal solltest du Syntax Fehler selber finden .
Wenn aber eine Programmiertechnische Lösung gefragt ist
dann Frag gerne nach .

Dein Compiler sagt doch, wo das problem ist:

nidhoegger@bueckstueck01 ~/Desktop $ g++ -o blargh blargh.cpp
blargh.cpp: In Funktion »int main()«:
blargh.cpp:18:9: Fehler: »eingabe« wurde in diesem Gültigkeitsbereich nicht definiert

Zeile 18: Die variable „eingabe“ existiert nicht (also vorher definieren)

dannach ist dein Programm ablauffähig…ABER:

int MinuteninSekunden(Minuten*60);
int StundeninMinuten(Stunden*60);
int TageinStunden(Tage*24);
int JahreinTage(Tage*364);

ich weiß nicht was das sein soll, auf jedenfall isses quark. Du erstellst hier variablen mit den namen z.B. MinuteninSekunden und weißt ihnen den Wert der variable Minuten * 60 zu. Da Minuten davor nur definiert aber nicht zugewiesen wurde, ist es ein glücksspiel, was dabei rauskommt.

Eine Funktion würde z.B. so aussehen:

int MinutenInSekunden(int minuten) {
return minuten * 60;
}

DANN würde das Ding, wenn du es mit
MinutenInSekunden(minuten);
aufrufst, auch das tun, was du willst.

Abgesehen davon kannst du das Programm auch in C schreiben, wenn du sowieso keine objektorientierten Ansätze verwenden willst.

Und gewöhn dir in C++ direkt „using namespace…“ ab. Irgendwann stößt damit auf probleme (nicht unbedingt bei std, aber es ist sauberer es wegzulassen und stattdessen std:: für funktionen aus diesem namensbereich zu nehmen).

Howdy,

ich weiß nicht was das sein soll, auf jedenfall isses quark.

nein, das ist kein Quark. Das ist die Standard-Art in C++, und um das geht es hier, ein Objekt zu initialisieren. Das Gleiche gilt auch fuer Standardtypen, wobei es bei diesen oftmals Geschmackssache ist.

Minuten * 60 zu. Da Minuten davor nur definiert aber nicht
zugewiesen wurde, ist es ein glücksspiel, was dabei rauskommt.

Richtig (wobei man sicherlich darueber disktuerien könnte, ob du nicht eher „deklariert“ gemeint hast). Und dies ist ein wesentlicher Unterschied zu Java. In C und C++ werden auto-Variablen nicht initialisiert und ihr Wert ist per C/C++ Standard „undefined“. Etwas anderes gilt fuer globale Variablen.

Abgesehen davon kannst du das Programm auch in C schreiben,
wenn du sowieso keine objektorientierten Ansätze verwenden
willst.

Falsch, denn dann haette die oben als erste genannte Initialisierung nicht funktioniert.

Gruss
S.

Es ist für das, was er will quark. Weil er eine Funktion will. Habe ja geschrieben, es weißt einfach nur einen Wert zu, der vorher zu bestimmen ist.

„Richtig (wobei man sicherlich darueber disktuerien könnte, ob du nicht eher „deklariert“ gemeint hast). Und dies ist ein wesentlicher Unterschied zu Java. In C und C++ werden auto-Variablen nicht initialisiert und ihr Wert ist per C/C++ Standard „undefined“. Etwas anderes gilt fuer globale Variablen“

Über die Namensgebung kann man streiten, ja. Deklariert ist natürlich richtig. Die initialisierung gilt übrigens für globale und statische Variablen.

„Falsch, denn dann haette die oben als erste genannte Initialisierung nicht funktioniert“
Das war allgemein gesprochen. Nicht auf dieses Programm bezogen.