C Neuling



  • Hi Forum User, ich arbeite momentan am Grundkurs von Jürgen Wolf.

    komme bei einem Programm nicht weiter...
    er sagt mir unhandled exeption und bricht das Programm nach der Eingabe ab.

    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void)
    {
    	int val = 0;
    	printf("Anzahl der Elemente\n");
    	if( scanf("%d", val) != 1 )
    	{
    		printf("Fehler bei der Eingabe...\n");
    		return EXIT_FAILURE;
    	}
    
    	if( val > 0 )
    	{
    		int iarr[val];
    		for( int i = 0; i < val; i++ )
    			{
    				iarr[i] = i;
    			}
    		for( int i = 0; i < val; i++ )
    			{
    				printf("%d\n", iarr[i]);
    			}
    		}
    	return EXIT_SUCCESS;	
    }
    

    mfg



  • Hi Forum User, ich arbeite momentan am Grundkurs von Jürgen Wolf.

    Dessen Bücher hier brüchtigt sind für ihre Fehler und dafür, dass diejenigen, die damit lernen, falsche Dinge lernen bzw. nicht ordentlich C lernen.

    In deinem Programm: bitte kompiliere immer mit Warnungen!

    $ gcc -Wall -Wextra xxx.c 
    xxx.c: In function ‘main’:
    xxx.c:9:21: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
        9 |         if( scanf("%d", val) != 1 )
          |                    ~^   ~~~
          |                     |   |
          |                     |   int
          |                     int *
    

    Oder auch mit clang:

    $ clang-14 -Weverything xxx.c 
    xxx.c:9:18: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
            if( scanf("%d", val) != 1 )
                       ~~   ^~~
    xxx.c:17:12: warning: variable length array used [-Wvla]
                    int iarr[val];
                             ^~~
    2 warnings generated.
    

    Du musst also &val statt val als Parameter angeben.
    Es ist auch keine gute Idee, das int iarr[val]; zu schreiben (variabel langes Array).



  • @wob
    oh no, das lag jetzt nicht am Buch, der geht auf meine Kappe. Hätte nicht gedacht, das er es kompiliert aber gut zu wissen.
    Deine Fehler Ausgabe ist natürlich Klasse
    mfg



  • @Schorsch24 sagte in C Neuling:

    oh no, das lag jetzt nicht am Buch, der geht auf meine Kappe.

    Am Buch liegt dann aber, dass du so komische Dinge wie in Zeile 17-25 schreibst. Wozu willst du da überhaupt ein Array haben?! Und die VLAs sind gefährlich, z.B. wenn du größere Zahlen eingibst. Du wirst unidiomatischen, fehleranfälligen Code mit diesem Buch lernen. (das war zumindest mein Stand von vor 10 Jahre mit Büchern von JW - wer weiß, wie das aktuell ist) Sei nur gewarnt - es schadet nicht, Dinge zu hinterfragen.

    Deine Fehler Ausgabe ist natürlich Klasse

    Wie gesagt, schalte Warnungen IMMER an (sind ja nicht "meine" Warnungen, sondern die macht der Compiler). Dein Compiler kann das mit Sicherheit auch.



  • @wob
    hab meinen Compiler mal auf Warning Level 2 gestellt und siehe da., das Programm bringt mir diesmal eine Fehlermeldung.

    wegen den Zeilen 17-25 das Buch sollte diese Methode "nur" darstellen, das es sinvoll ist oder eher gefährlich wegen überlauf,unterlauf stellt er auch im Buch klar

    bin mal weiter üben üben uns lesen
    danke wob
    mfg



  • @Schorsch24 sagte in C Neuling:

    hab meinen Compiler mal auf Warning Level 2 gestellt

    Wenn du den Microsoft-Compiler hast, warum nicht gleich Level 4 (also /W4)? https://learn.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level?view=msvc-170 (oder vielleicht sogar /Wall)



  • ich benutze Pelles C und es geht nur bis Level 2



  • @Schorsch24 sagte in C Neuling:

    hab meinen Compiler mal auf Warning Level 2 gestellt und siehe da., das Programm bringt mir diesmal eine Fehlermeldung.

    Es sind Warnungen.
    Der Compiler gibt Warnungen aus, wenn er etwas merkwürdig findet. Er Compiliert aber weiter und versucht daraus etwas zu machen.
    Bei Fehlern bricht der Compiler ab.

    Das heißt aber nicht, dass du Warnungen ignorieren kannst.
    Die haben ihre Berechtigung.
    Das geht von „Das Programm wird nicht wie gewünscht funktionieren“ bis „Es kann möglicherweise mal ein Problem auftauchen“


Anmelden zum Antworten