74 lines
2.0 KiB
C
74 lines
2.0 KiB
C
/**
|
|
* Funktionspointer verwenden
|
|
*
|
|
* Schreiben Sie eine Funktion `print_data`, der eine Liste
|
|
* von Strings und eine Ausgabefunktion als Funktionspointer
|
|
* übergeben wird. `print_data` läuft über die Strings und
|
|
* übergibt diese dann der Ausgabefunktion für die eigentliche
|
|
* Ausgabe.
|
|
*
|
|
* Schreiben Sie zwei verschiedene Ausgabefunktionen:
|
|
*
|
|
* - `to_console` welche den String einfach auf der Konsole ausgibt und
|
|
* - `to_console_ucase` welche den String auf der Konsole ausgibt
|
|
* aber vorher in Großbuchstaben umwandelt.
|
|
*
|
|
* Testen Sie Ihr Programm mit `print_data` und beiden Ausgabefunktionen.
|
|
*/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
// Funktionspointer-Typ für Ausgabefunktionen
|
|
typedef void (*OutputFunction)(const char*);
|
|
|
|
// Funktion, die die Datenliste durchläuft und die angegebene Ausgabefunktion aufruft
|
|
void print_data(const char* data[], int count, OutputFunction outputFunc) {
|
|
for (int i = 0; i < count; i++) {
|
|
outputFunc(data[i]);
|
|
}
|
|
}
|
|
|
|
char *to_uppercase(const char *lower) {
|
|
int len = strlen(lower);
|
|
|
|
// Allocate space for new string
|
|
char *upper = (char *) malloc(sizeof(char) * (len + 1));
|
|
|
|
// Add null terminator to string
|
|
upper[len] = '\0';
|
|
|
|
// Convert characters to uppercase one by one
|
|
for (int i = 0; i < len; i++) {
|
|
upper[i] = toupper(lower[i]);
|
|
}
|
|
|
|
return upper;
|
|
}
|
|
|
|
// Ausgabefunktion, die die Daten auf der Konsole ausgibt
|
|
void to_console(const char* data) {
|
|
printf("%s\n", data);
|
|
}
|
|
|
|
// Ausgabefunktion, die die Daten in eine Datei schreibt
|
|
void to_console_ucase(const char* data) {
|
|
char *ucase = to_uppercase(data);
|
|
to_console(ucase);
|
|
free(ucase);
|
|
}
|
|
|
|
int main() {
|
|
const char* data[] = { "Daten 1", "Daten 2", "Daten 3" };
|
|
int count = sizeof(data) / sizeof(data[0]);
|
|
|
|
// Funktionszeiger für Konsolenausgabe
|
|
print_data(data, count, to_console);
|
|
|
|
// Funktionszeiger für Dateiausgabe
|
|
print_data(data, count, to_console_ucase);
|
|
|
|
return 0;
|
|
}
|