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 🙂


Anmelden zum Antworten