Tutorial zur Einführung in die Sprache C||Fehlerbehandlung in der Sprache C||Rekursion in der Sprache C

Fehlerbehandlung in C-Sprache

Die Sprache C bietet keine direkte Unterstützung für die Fehlerbehandlung, aber als Systemprogrammiersprache ermöglicht sie Ihnen den Zugriff auf die zugrunde liegenden Daten in Form von Rückgabewerten. Wenn ein Fehler auftritt, geben die meisten C- oder UNIX-Funktionsaufrufe 1 oder NULL zurück und setzen außerdem einen Fehlercode errno, der eine globale Variable ist, die angibt, dass während des Funktionsaufrufs ein Fehler aufgetreten ist. In der Header-Datei <error.h> finden Sie verschiedene Fehlercodes.

Ein C-Programmierer kann also den Rückgabewert überprüfen und dann basierend auf dem Rückgabewert entscheiden, welche geeignete Aktion zu ergreifen ist. Entwickler sollten errno auf 0 setzen, wenn das Programm initialisiert wird, was eine gute Programmierpraxis ist. Ein Wert von 0 zeigt an, dass das Programm keine Fehler enthält.

errno, perror() 和 strerror()

 Die Sprache C stellt die Funktionen  perror() und  strerror() bereit, um  Textnachrichten im Zusammenhang mit errno anzuzeigen.

  • Die perror()-  Funktion zeigt die übergebene Zeichenfolge an, gefolgt von einem Doppelpunkt, einem Leerzeichen und der Textdarstellung des aktuellen errno-Werts.
  • Die Funktion strerror()  gibt einen Zeiger auf die Textdarstellung des aktuellen errno-Werts zurück.

Lassen Sie uns einen Fehlerzustand simulieren, indem wir versuchen, eine Datei zu öffnen, die nicht existiert. Sie können Fehlermeldungen auf verschiedene Arten ausgeben, hier verwenden wir eine Funktion, um die Verwendung zu demonstrieren. Beachten Sie außerdem, dass Sie  den stderr-  Dateistream verwenden sollten, um alle Fehler auszugeben.

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "Value of errno: %d\n", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

Versuch es

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Wert der Fehlernummer: 2
Von perror ausgegebener Fehler: Datei oder Verzeichnis nicht vorhanden
Fehler beim Öffnen der Datei: Keine solche Datei oder kein Verzeichnis

Division durch Null Fehler

Bei der Durchführung einer Divisionsoperation ist das Nichtprüfen, ob der Divisor Null ist, ein häufiges Problem für Programmierer beim Programmieren und führt zu einem Laufzeitfehler.

Um dies zu verhindern, prüft der folgende Code, ob der Divisor Null ist, bevor die Division ausgeführt wird:

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

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(0);
}

Versuch es

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Durch Null teilen! Verlassen...

Programmbeendigungsstatus

Wenn ein Programm eine Operation erfolgreich ausführt und normal beendet wird, hat es normalerweise den Wert EXIT_SUCCESS. Hier ist EXIT_SUCCESS das Makro, das als 0 definiert ist.

Wenn im Programm eine Fehlerbedingung vorliegt, hat es beim Beenden des Programms den Statuswert EXIT_FAILURE, der als -1 definiert ist. Das obige Programm kann also geschrieben werden als:

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

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "Division by zero! Exiting...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "Value of quotient : %d\n", quotient );

   exit(EXIT_SUCCESS);
}

Versuch es

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Wert des Quotienten: 4

Rekursion in C-Sprache

Rekursion ist der Prozess der Wiederholung von Elementen auf selbstähnliche Weise. Ebenso wird in Programmiersprachen der Aufruf einer Funktion selbst innerhalb einer Funktion als rekursiver Aufruf bezeichnet. folgendermaßen:

void recursion(){
   recursion(); /* 函数调用自身 */
}

int main(){
   recursion();
}

Die C-Sprache unterstützt Rekursion, dh eine Funktion kann sich selbst aufrufen. Bei der Verwendung von Rekursion muss der Programmierer jedoch darauf achten, eine Bedingung für das Verlassen der Funktion zu definieren, da er sonst in eine Endlosschleife eintritt.

Rekursive Funktionen spielen eine wichtige Rolle bei der Lösung vieler mathematischer Probleme, wie z. B. der Berechnung der Fakultät einer Zahl, der Generierung der Fibonacci-Folge und so weiter.

Fakultät einer Zahl

Das folgende Beispiel berechnet die Fakultät einer gegebenen Zahl mit einer rekursiven Funktion:

#include <stdio.h>

int factorial(unsigned int i){
    if(i <= 1){
        return 1;
    } 
    return i * factorial(i - 1); 
}
int main() {
    int i = 15;
    printf("Factorial of %d is %d\n", i, factorial(i));
    return 0;
} 

Versuch es

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Fakultät von 15 ist 2004310016

Fibonacci-Folge

Das folgende Beispiel verwendet eine rekursive Funktion, um die Fibonacci-Folge für eine bestimmte Zahl zu generieren:

#include <stdio.h>
int fibonaci(int i){
    if(i == 0){
        return 0;
    }
    if(i == 1){
        return 1;
    }
    return fibonaci(i-1) + fibonaci(i-2);
}

int main(){
    int i;
    for (i = 0; i < 10; i++){
        printf("%d\t%n", fibonaci(i));
     }
     return 0; 
} 

Versuch es

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

0 1 1 2 3 5 8 13 21 34

Supongo que te gusta

Origin blog.csdn.net/m0_69824302/article/details/130518651
Recomendado
Clasificación