C Programmierung Hilfe

  • Tatsächlich?
    Ich habe es zuerst ohne NewLine versucht, aber mein Compiler hängt mir das dran, wenn genug Zeichen im Array zur Verfügung stehen. Und wenn ich das nicht mitvergleiche, stimmt es nicht mit dem Text überein.
    Vielleicht liegts an meinem Compiler.

    Professioneller Webentwickler.

  • Zumindest meine DJGPP implementierung hängt es nicht mit hintendran, beim MinGW GCC Port/Cygwin GCC Port bzw. Microsoftscompiler bin ich mir nicht sicher. Mag auch davon abhängen, welche Laufzeitumgebung man nutzt. Meine nutzt eine Eigenimplementierung von gets, die nicht auf einen syscall angewiesen ist (und damit komplett im Ring3 läuft).
    Mag sein dass der syscall ein \n dran hängt, aber es wäre die einzige plausibler Fehlerursache.

  • Ui da kann ich leider nicht mitreden, von solchen Sachen habe ich (noch) keine Ahnung.


    Dann @ Threadstarter: Versuch das Script, dass ich gepostet habe mal ohne \n im strncmp.
    Dann funktioniert es höchstwahrscheinlich ;)

    Professioneller Webentwickler.

  • Hi


    Ich arbeite mit Visual C++ 2010 ;)


    Bei mir funktioniert das:
    #include "stdafx.h"
    #include <iostream>



    int main()
    {
    char str[16];


    printf ("Geben Sie das Passwort ein: \n");
    scanf ("%s",str);
    printf("Eingabe: %s\n", str);
    if(!strcmp(str, "Robdeflop"))
    {
    printf("Eingeloggt\n",str);
    }
    else printf("Zugriff verweigert\n");
    system("PAUSE");
    return 0;
    }


    MFG, Robdeflop®

  • So, hab das jetzt nochmal getestet.
    Wenn du scanf zum Abfragen benutzt, brauchst du kein \n bei strcmp.
    Wenn du fgets benutzt, dann hängt er dir ein \n an (wenn genug Arraystellen da sind), also musst du das auch bei strcmp anhängen.
    Kannst es dir also aussuchen.

    Professioneller Webentwickler.

  • Hatte nichts zu tun, habe mal das Rechenprogramm gemacht mit Subtraktion und Addition.
    Habs ohne einzelnen Funktionen gemacht, alles in main - weils bei so nem Miniprogramm eh nicht schlimm ist.
    Hab eigentlich nur das Grundsätzliche eingebaut, keine Sicherungen...


    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>



    //void auswahl(char entscheidung[30]);


    void main()
    {
    char entscheidung[30];


    gets(entscheidung);


    //auswahl(entscheidung);


    int i=0;
    char add[30]= "addition";
    char sub[30]= "subtraktion";




    if(strstr(entscheidung, add))
    {
    i=i+1;
    }
    else if (strstr(entscheidung, sub))
    {
    i=i+2;
    }


    int a, b, y;


    if(i==1)
    {
    printf("Sie haben Addition gewählt.\n Geben Sie die gewünschten Zahlen ein (a, b):\n");
    scanf("%i", &a);
    scanf("%i", &b);


    y = a+b;
    }
    else if(i==2)
    {
    printf("Sie haben Subtraktion gewählt.\n Geben Sie die gewünschten Zahlen ein (a, b):\n");
    scanf("%i", &a);
    scanf("%i", &b);


    y = a-b;
    }


    printf("\nErgebnis: %i", y);



    }


    //edit
    Achtet nicht auf meine Includes, die haue ich immer rein^^

  • Gerne doch ;)


    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>


    void main()
    {
    char entscheidung[30];//reserviert einen Array mit 30Plätzen (kann man auch weniger hernehmen, hab zur sicherheit gleich 30 genommen, damits nicht zu wenig wird ;))
    gets(entscheidung);//gets ist für die Eingabe in dem Fall zuständig. sprich durch gets(entscheidung) kann man dann etwas eingeben. das eingegebene wird "entscheidung" zugewiesen


    int i=0;//eine variable, die man später für die kontrolle bzw. if abfrage braucht
    char add[30]= "addition";//das brauche ich später für den vergleich selber
    char sub[30]= "subtraktion";


    if(strstr(entscheidung, add))//eine if abfrage - strstr schaut nach ob das zweite im ersten enthalten ist sprich "add" in "entscheidung" - kann man auch mit strcmp machen
    {
    i=i+1;//wenn add in entscheidung enthalten ist, weist er dem wert i (ursprünglich 0) 1 dazu
    }
    else if (strstr(entscheidung, sub))//dasselbe wie beim vorgänger nur mit sub
    {
    i=i+2;//wenn sub in entscheidung enthalten ist, weist er dem i 2 hinzu
    }


    int a, b, y;//a und b sind für die eingegebenen zahlen und y fürs ergebnis


    if(i==1)//in dem fall wenn i 1 ist (das ist dann der fall, wenn man addition eingegeben hat, weil wenn add in entscheidung enthalten ist weist er ja bei den vorherigen abfragen dem i 1 hinzu also = 1)
    {
    printf("Sie haben Addition gewählt.\n Geben Sie die gewünschten Zahlen ein (a, b):\n");
    scanf("%i", &a);
    scanf("%i", &b);


    y = a+b;
    }//das in den klammern führt er dann durch...
    else if(i==2)//wenn i 2 ist führt er das was in den klammern ist aus... und i ist dann 2 wenn sub in entscheidung enthalten ist
    {
    printf("Sie haben Subtraktion gewählt.\n Geben Sie die gewünschten Zahlen ein (a, b):\n");
    scanf("%i", &a);
    scanf("%i", &b);


    y = a-b;
    }


    printf("\nErgebnis: %i", y);//hier gibt er ergebnis aus
    }


    //edit
    Ich empfehle doch statt strstr in dem Fall strcmp zu nehmen, weil er bei strcmp schaut, dass er schaut, ob beide gleich sind oder nicht. Bei strstr schaut er, ob das zweite wort im ersten enthalten ist oder nicht... d.h. wenn du "blablaaddition" eingibst, nimmt er das auch an.