Problem mit Übersetzungs Programm
-
Wenn ich das Programm starte und die richtige antwort eingebe sagt er trotzdem das es falsch wäre -.-
Was mach ich da falsch
#include <iostream> #pragma hdrstop #pragma argsused using namespace std; int start(); int main() { start(); getchar(); } int start() { string verantwortlich; string a; cout<<"responsible = "; cin>>a; if (a==verantwortlich) { cout<<"richtig\n"; } else { cout<<"falsch\n"; } getchar(); }
-
Du hast eine Variable namens 'verantwortlich' definiert, die ist per Default leer - und jetzt vergleichst du die Nutzer-Eingabe mit dem Inhalt dieser Variablen. Also entweder du initialisierst die Variable - oder du verwendest gleich ein String-Literal:
void start()//wenn du nichts zurückgeben willst, verwende void - das implizite "return 0;" wird nur bei main() eingefügt { string a; cout<<"responsible = "; cin>>a; if (a=="verantwortlich") { cout<<"richtig\n"; } else { cout<<"falsch\n"; } getchar(); }
-
ok thx aber was bedeutet das wort implizite

-
Bassmaster schrieb:
ok thx aber was bedeutet das wort implizite

Ganz einfach: Siehst Du in CStolls Code ein "return 0;" (außer im Kommentar) ?
Wikipedia schrieb:
Implizites Wissen ... bezeichnet ... solche Kenntnisse oder Fähigkeiten, die nicht explizit formuliert sind...
Hier also:
int start() { //... return 0; // <- explizit formuliert: "start soll 0 zurückgeben" } int main() { // <- was soll main zurückgeben ? Standard sagt: "Wenn nichts explizit formuliert ist, dann soll main 0 zurückgeben". // Ergo: "implizites return 0" }Das sagt der Standard NUR über main !
Gruß,
Simon2.
-
ok thx
und was heisst jetzt explizit

naja egal ich hab den Sinn aufjedenfall verstanden was CStoll mir gesagt hat

-
"explizit" ist das Gegenteil von implizit - du mußt direkt im Code angeben, was du willst (bei einer "normalen" Funktion muß z.B. irgendwo ein 'return wert;' stehen).
-
ok thx
hab eine neue frage

wie kann ich machen das man die frage so beantworten kann:
ein projekt muss fertig werden
also ohne diese striche _
due: cout<<"a project is due = "; cin>>g; if (g=="ein_projekt_muss_fertig_werden") { system("CLS"); cout<<"\n"; cout<<"richtig a project is due = ein projekt muss fertig werden\n"; } else { cout<<"\n"; cout<<"falsch ! a project is due bedeutet nicht "<<g<<"\n"; cout<<"\n"; goto due; }
-
Du könntest getline() zum Einlesen verwenden, das nimmt auch alle Leerzeichen mit, die es findet (op>> betrachtet Leerzeichen als Ende der Eingabe).
PS: Wenn du auf diese Weise alle möglichen Vokabeln abfragen willst, wünsche ich dir viel Spaß
Das wird am Ende ein gigantisches Programm aus lauter (abgesehen von den eingetragenen Strings) identischen Mini-Blöcken besteht - und reichlich unflexibel.
-
Wie geht das denn genau mit dem getline();
irgendwie versteh ich das net

ps.
In mein Programm kommen nur 10 oder 11 Vokabeln^^
-
Bassmaster schrieb:
Wie geht das denn genau mit dem getline();
irgendwie versteh ich das net

Ersetze mal das "cin>>g;" durch "getline(cin,g);" (und lass dir von deinem Leerbuch oder der Compiler-Doku erklären, was getline() macht)
In mein Programm kommen nur 10 oder 11 Vokabeln^^
noch... (und selbst bei 10 oder 11 Wiederholungen des selben Codes wird das Ergebnis grauenhaft und unflexibel)
-
ok thx
hast du vielleicht ein beispiel wie man das besser lösen kann das das nicht so unübersichtlich ist ?
-
typedef std::map<std::string, std::string> dictionary; dictionary german_to_english; german_to_english["unnützes"] = "useless"; german_to_english("kleines"] = "small"; german_to_english["programm"] = "program"; std::cout << german_to_english["kleines"];wobei man so einfach kein funktionierendes übersetzungsprogramm schreibt. es gibt keine eindeutigen 1:1 übersetzungen, aber das weißt du sicher selbst.
-
wobei man so einfach kein funktionierendes übersetzungsprogramm schreibt. es gibt keine eindeutigen 1:1 übersetzungen, aber das weißt du sicher selbst.[/quote]
Das es keine eindeutige übersetzung gibt ist klar.
Thx für eure hilfe
