Teil 14 : Nützliches Allerlei

Zum Abschluß des Einführungskurses erden wir uns mit Funktionen beschäftigen, die man immer mal wieder brauchen kann.


int n = system ( char *c )

Wollten sie nicht schon immer mal einen Aufruf des Kommandozeileninterpreters (was für ein Wort) machen oder einfach nur das dir - Kommando benutzen ? Kein Problem !

Vorher muß noch folgende Library eingebunden werden
 

#include <stdlib.h>
In einem kompletten Beispiel sieht das dann so aus:
 
#include <stdio.h> 
#include <stdlib.h> 

void main ( void

    int status; 

    printf ("\nRein in die Befehlsebene\n"); 
    printf ("Mit EXIT gelangen sie wieder ins Programm\n\n"); 

    status = system ("command"); 

    printf ("\n\nWeiter im Programm\n\n"); 
     

}

Ist doch nicht so schwer, wie man es sich dachte.

Möchte man nun die Directory anzeigen, benötigt man nur noch ein simples
 

int status; 

status = system ("dir");

Der Rückgabewert enthält eine 0 , wenn das Programm Ordnungsgemäß lief, anderfalls eine -1 .



Typenwandlung (Casting)


Was tun, wenn man eine integer-Variable hat und diese einmal als double und einmal als char in Befehlsaufrufen benötigt ? Man verpackt sie und tut so, als ob die Variable den gewünschten Variablentyp entspricht.

Dies erreicht man indem man der eigentlichen Variablen in Klammern den gewünschten Variablentyp voranstellt:
 

( Zieltyp ) Variable

Noch sieht das ganze etwas verworren aus, deshalb schnell ein Praxisbeispiel.
 

#include <stdio.h> 
#include <math.h> 

void main ( void )

    int ganze_zahl = 4; 
    int i; 

    double fliesz_zahl = 2.34; 
    double d; 

    i = ( int ) fliesz_zahl; 

    d = pow ( (double) i , fliesz_zahl );

}

Vorsicht: Das geht nicht mit Zeigern!

Zu beachten ist: Wenn z.B. eine Typenumwandlung von double zu integer erfolgt , so wird der Nachkommateil abgetrennt. Generell muß man bedenken, das bei einer Typenumwandlung eventuell information verschwinden kann, z.B. der Nachkommaanteil.



 
double n = atof ( char *c )


Was man beim Casting ncht konnte, war Strings in eine Zahl umzuwandeln. Da aber dies eine recht häufige Angelegenheit ist, gibt es, oh Wunder, auch dafür Funktionen.

Es wird ein String in eine double-Größe umgewandelt. Dabei werden Vorzeichen beachtet , sowie Exponentialschreibweisen ( E oder e mit einer angehängten Ganzzahl ).

Eingebunden werden muß:

#include <math.h>

Dann sieht ein vollständiges Beispiel so aus:
 

#include <stdio.h> 
#include <math.h> 

void main ( void

    double n; 

    n = atof ( "2.4354" ); 

    printf ("%lf" , n );

}

Nach dem ausführen sollte auf dem Bildschirm folgendes erscheinen:
 

2.4354




int n = atoi ( char *c )

Wieso sollte, was bei Fließkommazahlen geht, nicht auch bei Ganzzahlen gehen ? Daher gibt es atoi , welches den übergebenen String in einen Integerwert umwandelt.

Im Gegensatz zu atof muß hie folgende Library eingebunden werden:
 

#include <stdlib.h>

Als Programm sieht das dann so aus:
 

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

void main ( void

    int n; 

    n = atoi ( "2.4354" ); 

    printf ("%lf" , n );

}

Als Ergebnis erhält man hier:
 

2



 
Parameterübergabe an das Hauptprogramm


Wer kennt das nicht, da ruft man einige Programme mit Parametern auf und wundert sich: Wie machen die das ? Nichts ist unmöglich.... Auch ohne Toyota wollen wir dieses kleine Geheimnis lüften.

bisher sah unser Hauptmodul immer so aus
 

void main ( )

Hier hatten wir bisher leere Klammern. Doch wenn wir in anderen Modulen dort Parameter stehen haben können, warum nicht auch hier ? Aber auch hier gibt es eine besonderheit von main . Es existieren zwei Standardparameter argc und argv , welche wie folgt aussehen.
 

void main ( int argc , char *argv [ ] )

Das erste Argument argc enthält die Anzahl der Parameter als Integervariable und argv speichert die einzelnen Parameter als Strings. Die Übergabe der Parameter wird beim Programmaufruf vom Betriebssystem übernommen.
 

Folgendes Programm schreibt die Anzahl und die übergebenen Parameter auf den Bildschirm:
 

#include <stdio.h> 

void main ( int argc , char *argv [ ] ) 

    int zaehler; 

    printf ("\n\nEs wurden folgende %d Parameter uebergeben :\n\n", argc ); 

    for ( zaehler = 0 ; zaehler < argc ; zaehler++ ) printf ("%s ", argv [zaehler] );

}

Wie man sehen kann, hat man so die Möglichkeit auf jeden einzelnen Parameter zuzugreifen.




...das Obligatorische

Autor: Sebastian Cyris PCDBascht@aol.com

Dieser C-Kurs dient nur zu Lehrzwecken! Eine Vervielfältigung ist ohne vorherige Absprache mit dem Autor verboten! Die verwendete Software unterliegt der GPL und unterliegt der Software beiliegenden Bestimmungen zu deren Nutzung! Jede weitere Lizenzbestimmung die der benutzten Software beiliegt, ist zu beachten!