Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Schleife, scanf und if...



Fabio
16-07-2005, 13:17
Hallo!

Ich möchte eine Eingabe vom Benutzer auffordern (String) und diese mit einer While-Schleife immer wieder fortsetzen bis der User "exit" eintippt, dann wird die Variable evar auf 1 gesetzt, die Whileschleife beendet und wenn alles gut lief natürlich mit return 0 beendet.

Wenn ich das Programm (das ohne Meldungen kompiliert wurde) starte, bekomme ich keine Meldung und auch keine Aufforderung etwas einzutippen. Es wird auch nichts ausgegeben... Ich bitte um Hilfe, hier der Code:



#include <stdio.h>

int main(void)
{
char input[20];
int evar = 0;

while(evar == 1)
{
printf("$: ");
scanf("%d",&input);

if(input == "ls" || input == "dir")
{
printf("No files here");
}
else
{
if(input == "exit")
{
evar = 1;
}
else
{
printf("Command not found.");
}
}
}
return 0;
}


Fabio

jeebee
16-07-2005, 14:23
ziemlich klarer Fall: du initialisierst evar als 0 und machst dann eine while-Schleife mit Startbedingung evar == 1. Dies führt dazu, dass die while-Schleife sofort beendet wird. Abgesehen davon wird dein Programm in einer Endlosschleife landen. (Problem: scanf)

ContainerDriver
16-07-2005, 15:38
Das Programm hat verschiedene Schwächen:

du willst einen String einlesen, gibst aber bei scanf() %d an
Strings, bzw. char* werden in C normalerweise mit strcmp() verglichen, nicht mit ==
wie schon erwähnt, die while-Schleife macht keinen Sinn


Gruß, Florian

Fabio
16-07-2005, 17:34
Danke für die Tipps! Die while-Schleife habe ich Korrigiert. Den scanf auch. aber ich weiss nicht wie ich mit strcmp() soetwas wie ein Else machen kann...

Fabio

ContainerDriver
16-07-2005, 17:51
Danke für die Tipps! Die while-Schleife habe ich Korrigiert. Den scanf auch. aber ich weiss nicht wie ich mit strcmp() soetwas wie ein Else machen kann...

Fabio
Schau dir mal die Manpage von strcmp an.
Kurz:


if (strcmp(string1,string2)==0)
{
/*string1 stimmt mit string2 überein*/
}
else
{
/*string1 ist von string2 verschieden*/
}

Gruß, Florian