Unbekannte Anzahl Zahlen einlesen



  • ja, so hatte ich das auch schon umgesetzt.

    Ich meinte eigentlich, das wenn man sone rundreise macht,also z.b

    Einlesen von Tastatur:
    1
    2
    3
    1

    das soll der halt danach ausgeben:

    von 1 nach 2
    von 2 nach 3
    von 3 nach 1

    also wenn der startwert wieder eingegeben wird ist schluss.
    die frage ist halt nur, wie man sowas macht, da man sich ja die zwischenstationen irgendwo merken muss und die Anzahl der Zwischenstationen ja noch nicht feststeht, bevor ich alle zahlen eingelesen hab.

    Lehrer meint halt mit nem 2dimensionalem array, aber das müsst ich ja während dem einlesen irgendwie vergrößern 😕



  • mal kurz zwei verständnisfragen:

    1. sind dir linked lists und malloc/realloc bekannt bzw. dürfen sie verwendet werden?

    2. soll der ortsname nun miteingelesen/ausgegeben werden? weil wenn nein wozu dann die zweidimensionalen arrays? wenn ja wären sicher structs angebracht.



  • Also du meinst sowas:

    // Rundereise.c
    
    #include <stdio.h>
    
    int main(void)
    {
    	int anfang;
    	int count;
    	int index = 0;
    	int reise[1000];
    
    	scanf("%d", &anfang);								// WERTE EINLESEN
    	while ( anfang != reise[index-1] )
    	{
    		scanf("%d", &reise[index]);
    		index++;
    	}
    	printf("\nVon: %d nach %d", anfang, reise[0]); // WERTE AUSGEBEN
    	for (count=0;count<(index-1);count++)		
    	{
    		printf("\nVon: %d nach %d", reise[count], reise[count+1]);
    	}
    	return 0;
    }
    

    Wenn Du wirklich unbegrenzte Einträge haben willst würde ich entweder:
    Eine einfach verkettete Liste benutzen (da kannst Du auch den Ortsnamen mit eingeben).

    struct rundreise {
        char ortsname[35+1];
        int entfernung;
        struct rundreise *next;
    };
    

    Ist allerdings etwas komplizierter zu handhaben.

    Ansonsten könntest Du auch jeden Eintrag einfach in eine Datei schreiben und nacher davon wieder auslesen. Ist vielleicht nicht so elegant aber damit kannst Du wirklich beliebig viele Einträge aufnehmen.



  • Hi,

    also ich hab das jetzt mit structs gelöst.

    Alerdings hab ich noch ne kleine Frage:

    Wo ist der Unterschied zwischen dem hier

    ptr = malloc(sizeof(struct reisen));
    

    und dem hier

    ptr = (struct reisen *) malloc(sizeof(struct reisen));
    


  • Einfach gesagt: Das zweite ist schlechter Stil.



  • TactX schrieb:

    Einfach gesagt: Das zweite ist schlechter Stil.

    einfach gesagt anders machts mein compiler gar nicht mit! liegt glaube ich daran dasses ein C/C++ compiler und mir da keine andere wahl bleibt oder lieg ich da falsch?



  • Es gibt so etwas wie einen "C/C++ Compiler" nicht. Es gibt C Compiler, und es gibt C++ Compiler.

    Aber ja, der Cast ist notwendig wenn man einen C++ Compiler verwendet. Bei einem C Compiler braucht man ihn einfach nicht. Es ist so oder so schlechter (C) Stil, einmal ein unnötiger Cast, einmal ein falscher Compiler.



  • TactX schrieb:

    Es gibt so etwas wie einen "C/C++ Compiler" nicht. Es gibt C Compiler, und es gibt C++ Compiler.

    haarspalterei nenn ich sowas! 😉
    ich verwende jedenfalls die dev c/c++ IDE (mingw compiler soweit ich weiss) und da kann ich eben C UND C++ code schreiben...



  • bill bones schrieb:

    TactX schrieb:

    Es gibt so etwas wie einen "C/C++ Compiler" nicht. Es gibt C Compiler, und es gibt C++ Compiler.

    haarspalterei nenn ich sowas! 😉

    Ich bin gerne mal für Haarspalterei zu haben, aber das hier ist keine.

    bill bones schrieb:

    ich verwende jedenfalls die dev c/c++ IDE (mingw compiler soweit ich weiss) und da kann ich eben C UND C++ code schreiben...

    Man kann mit den meisten IDEs in C und C++ programmieren. Die Frage ist nur, wie man der IDE beibringt einen C bzw. C++ Compiler zu verwenden. Häufig geschieht das über die Dateiendungen.
    Aber das ändert nichts an der Sache:
    C -> C Compiler
    C++ -> C++ Compiler



  • TactX schrieb:

    Die Frage ist nur, wie man der IDE beibringt einen C bzw. C++ Compiler zu verwenden.

    hab ich bei dem compiler selbst noch nich rausgefunden. standardmäßig wirds als .cpp gespeichert aber da der C++ compiler normalerweise abwärtskompatibel ist machts ja nix.



  • bill bones schrieb:

    ...aber da der C++ compiler normalerweise abwärtskompatibel ist machts ja nix.

    abwärtskompatibel zu was? zu einer älteren g++ version? 😃



  • ten schrieb:

    bill bones schrieb:

    ...aber da der C++ compiler normalerweise abwärtskompatibel ist machts ja nix.

    abwärtskompatibel zu was? zu einer älteren g++ version? 😃

    meinetwegen ist dann halt C++ abwärtskompatibel zu C... so besser?;)
    jetzt kommt aber bestimmt der nächste und will mir erzählen dass das bei seinem compiler nich so ist oder sonst was... 😞



  • C++ ist nicht abwärtskompatibel zu C. Obwohl C die Basis von C++ war, ist C kein komplettes Subset von C++, es gibt genügend Inkompatibilitäten.

    Nochmal: C und C++ sind zwei unterschiedliche Sprachen ⚠


Anmelden zum Antworten