Liste



  • hab ein prob

    Wir sollten ein Programm schreiben das eine Liste einliest. anschließend soll ein Name eingegeben werden der dan in der liste gesucht wird, wenn er gefunden wird soll die stelle angezeigt werden, wenn nicht soll er es ausgeben. und irgendwie funkt das bei mir nicht 😞

    #include<master.h> //sammel .h datei
    
    void Check(char[3][20], char[20]);
    void Found();
    void End();
    
    int i=1, i2=0, status;
    char list[3][20], search[20];
    
    void main()
    {
    	char list[3][20], search[20];
    
    	clrscr();
    
    	do
    	{
    		printf("Name %d: ", i);
    		gets(list[i]);
    		i++;
    	}
    	while(i!=4);
    
    	puts(list[2]);
    	getch();
    
    	clrscr();
    	printf("Suchname: ");
    	gets(search);
    
    	Check(list, search);
    
    	getch();
    }
    
    void Check(char list[3][20], char search[20])
    {
    	getch();
    
    	int i=1, i2=0;
    
    	do
    	{
    		i2=-1;
    		do
    		{
    			i2++;
    
    			if(list[i][i2]=='\0')
    			Found();
    
    			if(list[i][i2]!=search[i2])
    			break;
    		}
    		while(list[i][i2]!='\0');
    		i++;
    	}
    	while(i!=4);
    
    	End();
    
    }
    
    void End()
    {
    	clrscr();
    	printf("Name nicht in der Liste vorhanden");
    	getch();
    	exit(status - '0');
    }
    
    void Found()
    {
    	clrscr();
    	printf("Gefunden an Stelle %d der Liste", i);
    	getch();
    	exit(status - '0');
    
    }
    

    er schreibt immer falsche stellen raus, hab ich irgendeinen fehler bei der variablen übergabe oder is mein "such-system" in der Liste sowieso falsch ???



  • 1. Arrays fangen bei 0 an, nicht bei 1.

    2. Die lokale Variable i in der Funktion Check verdeckt die globale Variable i, die du in Found ausgibst.

    3. Warum benutzt du nicht strcmp?

    4. gets ist böse.

    Ein Tipp: Gewöhn dir die globalen Variablen ganz schnell ab.



  • vielen dank für die analyse

    das mit den globalen variablen werd ich machen 😉

    frage: warum ist gets nicht gut?

    und wie sortier ich die liste jetz am besten, hab den befehl schon wieder vergessen *mist*

    danke schonmal



  • MFK schrieb:

    1. Arrays fangen bei 0 an, nicht bei 1.

    2. Die lokale Variable i in der Funktion Check verdeckt die globale Variable i, die du in Found ausgibst.

    3. Warum benutzt du nicht strcmp?

    4. gets ist böse.

    Ein Tipp: Gewöhn dir die globalen Variablen ganz schnell ab.

    5. Es heißt int main

    frage: warum ist gets nicht gut?

    Es wird keine Überprüfung auf Bufferoverflow gemacht, das heißt es ist möglich böse Segementation Faults zu bekommen.

    und wie sortier ich die liste jetz am besten, hab den befehl schon wieder vergessen *mist*

    Ich kenne keine ANSI C Funktion, die sortiert, solltest du aber POSIX benutzen dann könntest du man: qsort(3)



  • IceFire schrieb:

    frage: warum ist gets nicht gut?

    Warum schreibst du "frage:" davor? 😕

    gets ist böse, weil du bei gets keine Möglichkeit hast, die Anzahl der einzulesenden Zeichen zu beschränken. Wenn der Benutzer bei deinem Programm mehr als 19 Zeichen eingibt, hast du ein Problem. Nimm fgets.



  • MFK schrieb:

    IceFire schrieb:

    frage: warum ist gets nicht gut?

    Warum schreibst du "frage:" davor? 😕

    gets ist böse, weil du bei gets keine Möglichkeit hast, die Anzahl der einzulesenden Zeichen zu beschränken. Wenn der Benutzer bei deinem Programm mehr als 19 Zeichen eingibt, hast du ein Problem. Nimm fgets.

    *g* sorry is ne angewohnheit 😃

    aha ok, thanks



  • supertux schrieb:

    Ich kenne keine ANSI C Funktion, die sortiert, solltest du aber POSIX benutzen dann könntest du man: qsort(3)

    qsort ist IMHO eine ANSI-C-Funktion.



  • Stimmt, hab das übersehen, als ich in der man page gelesen hab


Anmelden zum Antworten