Mein Code Funktioniert nicht!



  • Moin zusammen,

    ich versuche seit einigen Stunden mein Programm ans laufen zu bringen doch es Funktioniert einfach nicht.
    Wenn ich nur eine Datei erstelle funktioniert es oder wenn ich nur eine Datei auslese doch wenn ich beides zusammenfüge funktioniert nur noch das Datei erstellen sonst nichts.

    Danke schonmal im Vorraus

    Hier mein Code:

    #include <stdio.h>
    #include <string.h>

    void clrscr(void) {
    system("@cls||clear");
    }

    int main(void){
    FILE *datei;
    int x=0,y=0,zaehler=0;
    char zeichen;
    char passwort_original[20];
    char passwort_ori[20];
    char passwort_ein[20];

    printf("Welches Passwort moechten sie?");
    gets(passwort_original);
    datei=fopen("passwort_original.txt","w");
    fputs(passwort_original,datei);
    clrscr();
    printf("Bitte geben sie ihr Passwort ein");
    gets(passwort_ein);
    datei = fopen("passwort_original.txt", "r");
    if (datei != NULL) {
    	while ((zeichen = getc(datei)) != EOF) {
    		passwort_ori[x]=zeichen;
    		x++;
    	}
    }
    puts(passwort_ori);
    for(y=0;y<strlen(passwort_ori);y++){
    	if(passwort_ori[y]==passwort_ein[y]){
    		zaehler++;
    	}
    }
    printf("zaehler %i",zaehler);
    if(zaehler==strlen(passwort_ori)){
    	printf("Richtig");
    }
    else{
    	printf("falsch");
    }
    

    }



  • hast du es mal mit fclose probiert? das fällt mir so als erstes auf.

    dann fehlt beim einlesen das "terminatorzeichen", also die 0.

    gets sollte nicht verwendet werden, weil gefährlich und veraltet.

    zeichenketten vergleicht man mit strcmp aus der standardbibliothek.

    hast du es mal mit nem debugger versucht?



  • @wade1234

    Wenn ich fclose verwende passiert ab dem fclose garnichts mehr.

    Wie macht man das mit dem terminatorzeichen?

    gets ja wurde mir schonmal gesagt kenne aber nichts andere außer mit einer Vorschleife und printf.

    Leider hat Dev c++ kein Debugger



  • @chillerma sagte in Mein Code Funktioniert nicht!:

    Wenn ich fclose verwende passiert ab dem fclose garnichts mehr.

    wo verwendest du fclose denn? normalerweise sollte das zwischen fputs(passwort_original,datei); und datei = fopen("passwort_original.txt", "r"); passieren und dann funktionieren.

    Wie macht man das mit dem terminatorzeichen?

    gets ja wurde mir schonmal gesagt kenne aber nichts andere außer mit einer Vorschleife und printf.

    also für anfänger (siehe auch den nächsten punkt) lohnt es sich, die funktion scanf_s zu verwenden. ansonsten lohnt es sich bestimmt, wenn du dir ein vernünftiges buch mit übungsaufgaben (nur wohl nicht unbedingt von jürgen wolf) kaufst und viel experimentierst und herum spielst und jeden noch so kleinen programmabschnitt mit dem debugger überprüfst.

    Leider hat Dev c++ kein Debugger

    entschuldige die blöde frage, aber warum installierst du dir nicht visual studio? du bist da jetzt nicht der erste, bei dem mir das auffällt und es interessiert mich irgendwie. es gibt keine entwicklungsumgebung, die mehr komfort bietet und trotzdem kostenlos ist. wenn du irgendwann mal ein "profi" sein solltest und auf sowas stehst, kannst du ja gerne den vim benutzen und cc in die kommandozeile eingeben, aber jetzt im moment, wo es eher darauf ankommt, die elemente der programmiersprache zu lernen, ist visual studio ganz bestimmt die beste wahl.



  • @wade1234

    Mein Lehrer sagt wir müssen das nutzen also Dev C++



  • dein lehrer gehört geschlagen. wenn die 1. aufgabe das "hello world!"-programm ist, dann ist die 2. aufgabe das auslesen von variablenwerten mit dem debugger. dev c++ hat zwar glaube ich auch einen debugger, aber irgendwie ist das so "jahr 2005".😕



  • @wade1234

    Ich gaube ja das das Problem darin liegt das ich die Datei öffne im r modus und dann nochmal öffne



  • ja deshalb musst du danach auch fclose aufrufen. oder (nicht getestet!) du öffnest mit "r+" und rufst danach fseek("passwort_original.txt", 0, SEEK_SET) (vgl. http://www2.hs-fulda.de/~klingebiel/c-stdlib/stdio.htm#p_datei) auf und liest danach ein. aber eigentlich gilt öffnen -> schreiben -> schließen -> öffnen -> lesen -> schließen.



  • Jap Funktioniert ich hab beim ersten Test wohl was falsch geschrieben

    Danke das du mir geholfen hast



  • Die Klausur Morgen kann kommen



  • @wade1234 sagte in Mein Code Funktioniert nicht!:

    dein lehrer gehört geschlagen.

    Wo ist der Meldebutton?



  • was gibt es daran auszusetzen? die arbeit mit dem debugger ist das, was man gleich nach der arbeit mit dem compiler lernen sollte.



  • Neben dem, dass sich sich die Meldung nicht auf den debugger oder compiler beziehen würde, gibt es noch andere compiler und debugger, als den von Visual Studio. Beispielsweise mit eclipse cdt bekommt man auch eine IDE, kann aber den compiler aussuchen. Damit meine ich nicht, dass von Visual Studio abgeraten werden sollte.

    @wade1234 sagte in Mein Code Funktioniert nicht!:

    die arbeit mit dem debugger ist das, was man gleich nach der arbeit mit dem compiler lernen sollte.

    Und makefiles?



  • achso. ja also den lehrer sollte man einmal ganz dringend auf eine sitzkreisrunde mit hirschpulli und mate-tee einladen, um gemeinsam ein neues konzept der unterrichtsgestaltung auszuarbeiten. :smiling_face_with_open_mouth_smiling_eyes:

    braucht man makefiles? also bei größeren projekten spart das bestimmt zeit, weil nicht alles neu compiliert werden muss und alles mögliche eingestellt werden kann. aber sind die so richtig essentiell? ich frage so blöd, weil ich bisher immer ohne ausgekommen bin, während mir der debugger (also nicht der gdb, sondern mehr der von vs) immer eine menge zeit gespart hat.



  • Hm... irgendwie haben mir persönlich die Debugger noch nie wirklich zugesagt. Fand ich immer viel zu kompliziert zu benutzen. Ich haue lieber ein paar couts rein, lasse laufen und gucke danach in die Ausgabe, ab wo es falsch aussieht. Vorteil: Dann hat man gleich die Historie auf einen Blick.

    Das soll aber nicht heißen, dass ich Debugger schlecht finde. Ich benutze Debugger nur selten. In Java dagegen fand ich den extrem sinnvoll, weil man da Code ändern kann und einfach mit geändertem Code weiterlaufen kann. In C++ muss ich dazwischen erst noch kompilieren bzw. das Programm neu starten.



  • @wob sagte in Mein Code Funktioniert nicht!:

    einfach mit geändertem Code weiterlaufen kann. In C++ muss ich dazwischen erst noch kompilieren bzw. das Programm neu starten

    Nein, wenn die Änderungen nicht zu groß sind geht das in VS 2017 auch ganz gut.



  • @wob sagte in Mein Code Funktioniert nicht!:

    In Java dagegen fand ich den extrem sinnvoll, weil man da Code ändern kann und einfach mit geändertem Code weiterlaufen kann. In C++ muss ich dazwischen erst noch kompilieren bzw. das Programm neu starten.

    Visual Studio kann Edit and Continue seit spätestens 2015 auch mit C++.



  • @swordfish sagte in Mein Code Funktioniert nicht!:

    @wob sagte in Mein Code Funktioniert nicht!:

    In Java dagegen fand ich den extrem sinnvoll, weil man da Code ändern kann und einfach mit geändertem Code weiterlaufen kann. In C++ muss ich dazwischen erst noch kompilieren bzw. das Programm neu starten.

    Visual Studio kann Edit and Continue seit spätestens 2015 auch mit C++.

    Wobei es nur mit 32bit code funktioniert aber nicht mit 64bit code. Erst mit VS 2017 scheinen die das auch für 64bit code wieder zum laufen gebracht zu haben



  • @firefly sagte in Mein Code Funktioniert nicht!:

    Wobei es nur mit 32bit code funktioniert aber nicht mit 64bit code.

    *kopfschüttel* C++ Edit and Continue in Visual Studio 2015



  • @swordfish sagte in Mein Code Funktioniert nicht!:

    @firefly sagte in Mein Code Funktioniert nicht!:

    Wobei es nur mit 32bit code funktioniert aber nicht mit 64bit code.

    *kopfschüttel* C++ Edit and Continue in Visual Studio 2015

    Ja kann ich zurück geben 😉

    Aus dem Blog:

    "EnC for x64 should only be used when building the binary with the x86_x64 cross compiler: For our first update we plan to use the native x64 compiler if that is what you originally used. However in RTM, EnC always uses the cross compiler, so it’s not recommended to try to use EnC with a binary compiled with native compiler as the changes will be compiled with a different version of the compiler than the original binary."

    => Es funktioniert nicht immer.
    In der Firma wo ich arbeite war das der Fall das EnC mit 64 bit compilaten nicht/nicht immer funktionierte.
    Erst mit VS2017 scheint es wieder zu klappen.


Log in to reply