Simple Arrays



  • 1. Eine Zahl einlesen die in einer Variable gespeichert wird.
    2. 20 weitere Zahlen in ein Array abspeichern.
    3. Die Zahlen ausgeben, die größer sind, als wie die unter 1. eingegebene Zahl.
    4. Wieviele Zahlen sind größer?
    Hier mein Programmcode:

    #include <stdio.h>
    void main(void)
    {
    	int eingabe, i=0, a, zaehler=0, array[19];
    	scanf("%d",&eingabe);
    	while(i<20)
    	{
    		scanf("%d",&a);
    		array[i]=a;
    		i=i+1;
    	}
    	i=0;
    	while(i<20)
    	{
    		if(array[i]>eingabe)
    		{
    			printf("\n%d",array[i]);
    			zaehler=zaehler+1;
    		}
    		i=i+1;
    	}
    	printf("\n\n%d\n",zaehler);
    }
    

    Ich verstehs nicht? Das funktioniert nicht... Die Anzahl der Zahlen die größer sind ist falsch und die letzte ausgegebene Zahl die größer ist, wird auch falsch ausgegeben.
    Kann mir da jemand helfen? THX!



  • Schieni schrieb:

    Kann mir da jemand helfen? THX!

    zuerst mach mal so :

    int array[20]
    


  • Jetzt geht alles...
    Mir dämmert da auch was... Ich glaub in dem 21. Feld wird markiert, dass das Array zu Ende ist, oder?
    Danke für die Hilfe!



  • Nein, da ist keine Markierung.
    Lies dir vielleicht mal das hier http://www.c-plusplus.net/forum/viewtopic.php?t=39497 aus der FAQ durch.



  • Schieni schrieb:

    Jetzt geht alles...
    Mir dämmert da auch was... Ich glaub in dem 21. Feld wird markiert, dass das Array zu Ende ist, oder?
    Danke für die Hilfe!

    Wo siehst du 21 Felder?
    int[20] sind 20 Felder, also [0..19]



  • OK... aber für dieses \0 brauch man also kein Extra-Feld?!?



  • > void main(void)

    Dein Code sieht so nach C99 aus (im falschen Forum?)

    Nach C99:
    The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no
    parameters:

    int main(void) { /* ... */ }
    

    or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):

    int main(int argc, char *argv[]) { /* ... */ }
    

    or equivalent;9) or in some other implementation-defined manner.

    Die return Anweisung in int main(void) kannst du dir sparren:
    (siehe 5.1.2.2.3 Program termination)
    10) reaching the } that terminates the main function returns a value of 0.



  • > aber für dieses \0 brauch man also kein Extra-Feld?!?

    doch - wo soll man es den Sonst speichern? \0 steht für ein Bitmuster, das dem Programm sagt hier ist der String zu Ende



  • Ja, ich weiß... jeder Prof will es anders haben....
    vorher musste ich immer int main() schreiben und die 0 am Ende zurückgeben...
    der neue Prof hätte nun gerne void main(void) - naja... ich mach es jedem so wie er es gerne haben will 😉



  • Vertexwahn schrieb:

    > aber für dieses \0 brauch man also kein Extra-Feld?!?

    doch - wo soll man es den Sonst speichern? \0 steht für ein Bitmuster, das dem Programm sagt hier ist der String zu Ende

    Versteh ich nicht ganz... ich lese 20 Zahlen ein und erstelle doch auch nur ein array mit 20 Feldern. Wo wird denn dann das \0 hingeschrieben? Oder erzeugt der sich automatisch noch ein Feld hinten dran?



  • In Programm werden oft Strings in Form von Arrays gespeichert - an viele Funktionen übergibt man einen String in einem Array indem man einfach die Adresse an die Funktion übergibt, die angibt wo das erste Element (Buchstabe) des Strings zu finden ist. Das Programm springt dann einfach zum ersten, dann zum zweiten, dann zum dritten usw. Buchstaben "automatisch" (geht mit Zeigerarithmetik)

    damit das Programm weiß wo der Sting aufhört hat man ein Zeichen eingeführt das dem Programm sagt hier ist Ende - \0



  • Schieni schrieb:

    Versteh ich nicht ganz... ich lese 20 Zahlen ein und erstelle doch auch nur ein array mit 20 Feldern. Wo wird denn dann das \0 hingeschrieben? Oder erzeugt der sich automatisch noch ein Feld hinten dran?

    Richtig, du liest Zahlen ein. Zahlen sind keine Strings, dementsprechend muss auch ihr Ende nicht mit \0 gekennzeichnet werden.
    Strings sind Arrays, aber Arrays keine Strings, weswegen Strings aber nicht Arrays mit einem \0 abgeschlossen werden.


Anmelden zum Antworten