C++ Code für Windows bricht unter Linux ab

sharkman

Grünschnabel
Hallo ,

ich bin sharkman und kein Studierter Programmierer, sonder einer der die Sprache C++ sich durch Tuorials versucht beizubringen.
Mein Tutorial heißt : Learn to Program with C++ von John Smiley ! Hier benutzen die Studenten Windows und ich benutze Ubuntu Linux.
Mein Compiler ist der GNU - g++ Ubuntu 4.4.3-4ubuntu5 , das Programm heißt schlicht "Grades" es wurde einwandfrei Kompiliert.
Nun wenn ich es starte beendet es sich direkt.
Ich habe ein Screen-shot von meiner Terminal Ausgabe und den C++ Code angehängt.
Ich würde mich freuen wenn ich hierzu eine Antwort bekommen könnte.

Vielen Dank im voraus

sharkman

:confused: :confused:
 

Anhänge

  • Bildschirmfoto-dark@galaxy: ~-CPPFiles-Grades.png
    Bildschirmfoto-dark@galaxy: ~-CPPFiles-Grades.png
    30,1 KB · Aufrufe: 49
  • Grades.pdf
    Grades.pdf
    29,5 KB · Aufrufe: 50
So rein intuitiv würde ich vermuten, dass du zuerst Yes eingibst und dann einfach die Eingabetaste drückst, dann terminiert nämlich das Programm mit der gezeigten Ausgabe.
 
Moin,

habe nur kurz über den angehängten Code geschaut, aber nach dem
C++:
cout << "You must select a student type"

beendet Du das Programm durch Anweisung "return 1" (!)

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Ist der Code aus dem Tutorial? Das taugt dann aber anscheinend nicht viel.

Das Problem liegt hier:
C++:
cout << "Do you want to calculate a grade? ";
cin >> moreGradesToCalculate;
Du liest hier ein Wort ein. Um das aber im Programm einzugeben mußt du auch Enter drücken. Daraufhin wird das eingegebene Wort in der moreGradesToCalculate Variable gespeichert, aber das Newline Zeichen von der Entertaste ist immer noch im Eingabestrom cin.

Dann führst du aus:
C++:
cin.getline(response,256);
Mal ganz abgesehen davon, das es besser wäre std::string zu verwenden und abgesehen davon das sowieso keine der Eingaben geprüft werden ob überhaupt etwas eingelesen wurde, liest du mit dieser Anweisung immer ein leeres Wort ein da gleich das erste Zeichen welches in cin steht ein Newline (\n) ist. (unter der Annahme du hast y-e-s-Enter eingegeben)

\edit: es würde funktionieren, wenn du z.B. gleich y e s Leertaste 1 Enter eingeben würdest.

Man könnte es z.B. so machen:
C++:
#include <string>

while (cin >> moreGradesToCalculate) {
  // in Großbuchstaben umwandeln
  ...

  if (moreGradesToCalculate != "YES") break;

  cin.sync();
  std::string response;

  if (getline(cin, response)) {
     if (response.empty()) {
        // Fehler: leere Zeile
     } else {
       ... 
     }     
  } else {
    // konnte keine Zeile einlesen.
    return 1;
  }
}
Gruß
 
Zuletzt bearbeitet:
Hallo ,

an alle die mir Geantwortet haben erst mal recht herzlichen Dank.

Es tut mir Leid das ich dies erst so spät tute , aber ich hatte ein paar Probleme
mit meinen Computer und dem Internet.

Ich werde eure Anmerkungen beherzigen und schaue mal ob ich das jetzt zu laufen bekomme.

:):):)

Gruß
sharkman
 
Die Fehler wurden ja bereits angemerkt:

Visual-Studio mag den Code so nicht

Problem:

cin >> moreGradesToCalculate;


Fehler
error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden,
der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder
keine geeignete Konvertierung möglich)


Verwendet man statt

//#include <cstring>
//#include <cstdlib>

wie vorgeschlagen

#include <string>

Lässt es sich kompilieren.

Kommt aber dann bei

cin.getline(response,256);

mit einem leeren String und der Fehlermeldung zum Ende


----

Das cin.sync() hilft hier.

Im weiteren Verlauf kommt dann cin.getline() zum Einsatz - das wäre auch im
ersten Fall wohl die gesündere Wahl gewesen - zumal dann sowieso das
toupper() aus der ANSI-C Kiste rausgeholt wird.

Ich kann nicht wirklich glauben das jemand so einem Murks in ein
Tutorial schreibt.
 
Hi.
... und offenbar noch Geld damit verdient, Bücher schreibt und Kurse anbietet. :eek:

Gruß

Das Buch ist seit 2002 bei Amazon gelistet und hat noch KEINE Bewertung - das sollte einem
zu denken geben.

Das der Autor ausser C++ auch C, C#, Java, Basic sehr gut beherrscht ist eher unwahrscheinlich.

Immerhin gibt es bei Visual Basic positives Feedback - er hätte es dabei belassen sollen.

PS: Wenn man seinen eigenen Verlag hat (Smiley Publishing ) kann man alles veröffentlichen ...
 
Zurück