Du darfst den Line Feed natürlich nicht mitvergleichen, denn ein Returnsignal beendet die Eingabe..
Also als Beispiel: strncmp(entscheidung, "subtraktion\n", 16) == 0 genau das muss weg.
C Programmierung Hilfe
- Vince
- Geschlossen
- Erledigt
-
-
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. -
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 -
Ich werde das morgen testen, da mein Programm nur aufm Klaptop funktioniert^^
Mit welchem Programm arbeitet ihr? Ich benutze Codeblocks
-
Ich arbeite ebenfalls mit Codeblocks, da wir das auch in der Schule verwenden und überall installiert ist.
-
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. -
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^^ -
Danke Kones
Der Zweck dazu ist, dass ich es auch verstehe xD..
Also wenn du mir noch alles erklären würdest, dann wäre es perfekt
-
-
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" zugewiesenint 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. -
breadfish.de
Hat das Thema geschlossen.