• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Was ist an diesem Quelltext falsch?

HarryPodda

Anfänger/in
Mitglied seit
06.05.2007
Beiträge
64
Reaktionspunkte
0
tach

ich peil den fehler in diesem text nicht:

int woche;
void jahres_start() {

// Starttagesabfrage (mit welchem Tag begann das Jahr?)
char starttag[20];
cout << "Mit welchem Tag begann dieses Jahr?\nMo/Di/Mi/Do/Fr/Sa/So\n";
cin >> starttag;

if(starttag == "Mo") woche = 0;
if(starttag == "Di") woche = 1;
if(starttag == "Mi") woche = 2;
if(starttag == "Do") woche = 3;
if(starttag == "Fr") woche = 4;
if(starttag == "Sa") woche = 5;
if(starttag == "So") woche = 6;

cout << woche;

}

als ausgabe gibts immer "0"... was hab ich falsch gemacht?
 
The_Linux_Pinguin am 11.09.2007 18:04 schrieb:
Tipp ins Blaue: Muss man das "\n" bei der Eingabe beruecksichtigen?
Nee, das hat damit nichts zu tun. Aber die Art, wie die Eingabe in das Feld starttag übernommen werden soll, ist bestimmt nicht korrekt.
Ich weiß es jetzt nicht, aber einfach cin >> feld; sieht sehr komisch aus.
 
Thomsn am 11.09.2007 18:25 schrieb:
The_Linux_Pinguin am 11.09.2007 18:04 schrieb:
Tipp ins Blaue: Muss man das "\n" bei der Eingabe beruecksichtigen?
Nee, das hat damit nichts zu tun. Aber die Art, wie die Eingabe in das Feld starttag übernommen werden soll, ist bestimmt nicht korrekt.
Ich weiß es jetzt nicht, aber einfach cin >> feld; sieht sehr komisch aus.

also nebenbei: das ist ein konsolenprogramm, keins mit grafischer oberfläche ;)

cin >> variable ist richtig, bei der texteingabe sinds kleinerzeichen und bei der text ausgabe sinds größer zeichen, also z.b. cout << variable
 
HarryPodda am 11.09.2007 18:30 schrieb:
cin >> variable ist richtig, bei der texteingabe sinds kleinerzeichen und bei der text ausgabe sinds größer zeichen, also z.b. cout << variable
:confused:
Du übergibst da doch garkeine Variable, sondern ein Feld. Nämlich 'char starttag[20]'.
Und genau das ist meiner Meinung nach falsch. Funktionieren würde das, wenn Du ne entsprechende Funktion basteln würdest, die jedes einzelne Element des Feldes füllt. Oder wenn Du dafür so ne fertige Funktion wie gets(); nutzen würdest. Aber cin?

BTW: So funktioniert der Code problemlos und unkomplizierter als mit oben beschriebenen Methoden:
Code:
int woche;
void jahres_start() {

// Starttagesabfrage (mit welchem Tag begann das Jahr?)
[b]string starttag;[/b]
cout << "Mit welchem Tag begann dieses Jahr?\nMo/Di/Mi/Do/Fr/Sa/So\n";
cin >> starttag;

if(starttag == "Mo") woche = 0;
if(starttag == "Di") woche = 1;
if(starttag == "Mi") woche = 2;
if(starttag == "Do") woche = 3;
if(starttag == "Fr") woche = 4;
if(starttag == "Sa") woche = 5;
if(starttag == "So") woche = 6;

cout << woche;
}
Musst dazu natürlich <string> inkludieren.
 
Thomsn am 11.09.2007 18:34 schrieb:
HarryPodda am 11.09.2007 18:30 schrieb:
cin >> variable ist richtig, bei der texteingabe sinds kleinerzeichen und bei der text ausgabe sinds größer zeichen, also z.b. cout << variable
:confused:
Du übergibst da doch garkeine Variable, sondern ein Feld. Nämlich 'char starttag[20]'.
Und genau das ist meiner Meinung nach falsch. Funktionieren würde das, wenn Du ne entsprechende Funktion basteln würdest, die jedes einzelne Element des Feldes füllt. Oder wenn Du dafür so ne fertige Funktion wie gets(); nutzen würdest. Aber cin?

BTW: So funktioniert der Code problemlos und unkomplizierter als mit oben beschriebenen Methoden:
Code:
int woche;
void jahres_start() {

// Starttagesabfrage (mit welchem Tag begann das Jahr?)
[b]string starttag;[/b]
cout << "Mit welchem Tag begann dieses Jahr?\\nMo/Di/Mi/Do/Fr/Sa/So\\n";
cin >> starttag;

if(starttag == "Mo") woche = 0;
if(starttag == "Di") woche = 1;
if(starttag == "Mi") woche = 2;
if(starttag == "Do") woche = 3;
if(starttag == "Fr") woche = 4;
if(starttag == "Sa") woche = 5;
if(starttag == "So") woche = 6;

cout << woche;
}
Musst dazu natürlich <string> inkludieren.

...und ein using namespace std; als erste Zeile in die Funktion packen.
Der Operator >> funktioniert übrigens auch für ein Character-Array, der Fehler liegt beim Vergleichsoperator '==', der hier so nicht angewandt werden kann. Das muss über if (0 == strcmp(starttag, "Mo")) oder - für den Fall, dass Gross- und Kleinschreibung keine Rolle spielen soll - mit if (0 == strcmpi(starttag, "Mo")) programmiert werden. Dann funktioniert es.
Code:
..
 if (0 == strcmpi(starttag, "Mo"))
   woche = 0;
else if (0 == strcmpi(starttag, "Do"))
   woche = 1;
...
else {
  // Fehler!
  cout << "Falsche Eingabe!" << endl;
  }
Aber ich würde davon abraten, mit >> eine Zeichenkette in ein Array einzulesen: wenn der Anwender nämlich mehr Zeichen eingibt, als das Array fassen kann, ist der Absturz vorprogrammiert!
Die Lösung mit std::string ist auf jeden Fall die elegantere (und außerdem "echtes" C++!)
 
thehero am 12.09.2007 09:14 schrieb:
Der Operator >> funktioniert übrigens auch für ein Character-Array, der Fehler liegt beim Vergleichsoperator '==', der hier so nicht angewandt werden kann.
Oh, gut zu wissen. Hätte mir eigentlich auch klar werden müssen, wenn ich in dem Fall mal über == nachgedacht hätte.
 
Zurück