-1

This is my code, my question is how can I stop "terminate" ... the code if the user presses enter on the first scanf?

I want to stop the Programm if the user presses enter, but I don't have an Idea how to do so..

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int zeichenkette;

    // abfragen wie lange unser zeichenkette sein soll
    printf("Wie viele Zahlen wollen sie eingeben: ", zeichenkette);
    scanf("%i", &zeichenkette);


    // hier wird die länge des arrays bestimmt
    int* array = malloc(zeichenkette * sizeof(int));


    // deklaration
    int sum = 0;
    int lowest = 32767;
    int max = 0;



    for(int i = 0; i < zeichenkette; i++) {

        // zahl angabe, diese wird zum array hinzugefügt
        printf("Geben sie eine Zahl an:  \n");
        scanf("%d", &array[i]);

        // Der summe wird immer mit der geraden array integer addiert
        sum = sum + array[i];

        // wenn eine zahl gröẞer als 0 ist dann max variable überschreiben
        if(max < array[i]) {
            max = array[i];
        };

        // wenn es eine zahl in der array kleiner als 32767 gibt dann überschreiben
        if(lowest > array[i]) {
            lowest = array[i];
        };

    };


    // da wir die summe schon haben und in die zeichenkette variable die länge haben können wir der mittelwert berechnen
    int mittelwert = sum/zeichenkette;

    // Ausgabe
    printf("Summe: %i \nMittelwert: %i\nMax: %i\nMin: %i\n", sum, mittelwert, max, lowest);

}```

1 Answers1

0

You don't want to use scanf() for something like that, instead you could use fgets() and sscanf() or strtol() to later parse the string.

  • strtol()

     #include <stdio.h>
     #include <stdlib.h>
    
     #define MAX_LEN 500
    
     int main()
     {
         long int zeichenkette = 0L;
         char *endptr = NULL;
         char buff[MAX_LEN];
    
         // abfragen wie lange unser zeichenkette sein soll
         printf("Wie viele Zahlen wollen sie eingeben: ");
    
         if(fgets(buff,MAX_LEN,stdin) == NULL)
         {
             fprintf(stderr,"error handling here");
             exit(EXIT_FAILURE);
         }
    
         if (buff[0] == '\n') /* first char in buff is the newline char */
         {
             puts("Exiting");
             exit(EXIT_SUCCESS);
         }
         else
         {
             zeichenkette = strtol(buff,&endptr,0); /* could do some error checking here, errno and enptr */
         }
     /* ... */
    
  • sscanf()

     #include <stdio.h>
     #include <stdlib.h>
    
     #define MAX_LEN 500
    
     int main()
     {
         int zeichenkette = 0;
         char *endptr = NULL;
         char buff[MAX_LEN];
    
         // abfragen wie lange unser zeichenkette sein soll
         printf("Wie viele Zahlen wollen sie eingeben: ");
    
         if(fgets(buff,MAX_LEN,stdin) == NULL)
         {
             fprintf(stderr,"error handling here");
             exit(EXIT_FAILURE);
         }
    
         if (buff[0] == '\n')
         {
             puts("Exiting");
             exit(EXIT_SUCCESS);
         }
         else
         {
             if (sscanf(buff,"%d",&zeichenkette) != 1) /* always check the return value of scanf() */
             {
                 fprintf(stderr,"error handling");
                 exit(EXIT_FAILURE);
             }
         }
     /* ... */
    

As a side note, you should always check the return value of scanf(), thi way you can detect errors on input.

alex01011
  • 1,670
  • 2
  • 5
  • 17