Benutzer Diskussion:Mario: Unterschied zwischen den Versionen
Erscheinungsbild
Mario (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Mario (Diskussion | Beiträge) K Weiterer Text |
||
| Zeile 1: | Zeile 1: | ||
= CKurs - Ein und Ausgabe = | = CKurs - Ein und Ausgabe = | ||
-DRAFT- | - DRAFT - | ||
= Wiederholung = | = Wiederholung = | ||
'''Durch Studis zu ergänzen''' | |||
''HelloWorld''-Programm an die Tafel (Kommentare=Infos zum Erzählen) | ''HelloWorld''-Programm an die Tafel (Kommentare=Infos zum Erzählen) | ||
#include <stdio.h> // Einbinden des Headers der IO-Lib<br> | #include <stdio.h> // Einbinden des Headers der IO-Lib<br> | ||
| Zeile 14: | Zeile 17: | ||
} | } | ||
* ''\n'' für eine Zeilenende | |||
* ''\"'' für ein ''"''-Symbol | |||
* ''\\'' für ein ''\''-Symbol (Windows-Pfadtrenner) | |||
= dynamische Ausgabe = | |||
(Ausgabe an Tafel/Laptop) | |||
#include <stdio.h><br> | #include <stdio.h><br> | ||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||
{ <br> | { <br> | ||
printf("Hello World!''' %d | printf("Hello World!''' Some Number: %d'''\n"''', 42'''); // Wichtig: Komma erwähnen! | ||
return 0; | return 0; | ||
} | } | ||
Nutzbar auch für Variablen: | * ''printf'' benutzt das '''%'''-Zeichen zur Markierung welcher Teil des Textes ersetzt werden muss. | ||
* nach dem '''%'''-Zeichen steht der ''Typbezeichner'': '''%d''' steht für '''d'''igit (ganzzahlige Formatierung). | |||
** ''%s'' für Zeichenketten | |||
** ''%f'' für Fließkommazahlen | |||
** ''%%'' für ''%'' | |||
== Variablen== | |||
* bisher: keine Verbesserung, da '''%d''' auch einfach direkt '''42''' sein könnte ... | |||
* Nutzbar auch für Variablen: ('''''Frage'': Was ist eine Variable?''') | |||
#include <stdio.h><br> | #include <stdio.h><br> | ||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||
{ | { | ||
int | '''int iSumOfSquares = 1 + 9 + 8 + 5;''' | ||
printf( | printf("Hello World! Some Number: %d\n", '''iSumOfSquares'''); | ||
return 0; | return 0; | ||
} | } | ||
* '''''Frage:'' Was ist das Ergebnis? Warum?''' | |||
*''% | |||
*''% | * Formatierung | ||
** ''%5d'' für 5 Zahlen mindestens | |||
** ''%05d'' für 5 Zahlen mindestens, aufgefüllt mit Nullen | |||
** ''%-5d'' für 5 Zahlen mindestens, linksbündig | |||
** ''%-5.2f'' für 5 Zahlen mindestens, linksbündig, genau 2 Nachkommastellen | |||
'''''Beispiel (An Tafel/Laptop)''''' | |||
char pcName[255]; | |||
strcpy(pcName,"Mario");// #include <string.h><br> | |||
unsigned uiAge = 26u; | |||
float fHeight=1.83f; | |||
float fPi = 3.1459f;<br> | |||
printf("%s ist %5.0fm hoch und %05d Jahre alt\n", pcName, fHeight, uiAge); | |||
printf("%s ist %-5.1fm hoch und %-05d Jahre alt\n", pcName, fHeight, uiAge);<br> | |||
'''''Frage: '' Was ist das Ergebnis? Warum?''' | |||
Mario ist 2m hoch und 00026 Jahre alt | |||
Mario ist 1.8 m hoch und 26 Jahre alt | |||
= Eingabe = | |||
* scanf wie printf | |||
* liest stets von der Kommandozeile | |||
#include <stdio.h><br> | #include <stdio.h><br> | ||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||
{ | { | ||
char | char pcName[255]; // Verschiebung der Eklärung auf späteres Tutorium. | ||
unsigned int uiAge; | |||
printf("%s ist %d Jahre alt\n", pcName, uiAge); | '''printf("Name: ");''' | ||
'''scanf("%s", &pcName);''' // '''&''': Adressoperator, kommt später, immer mitnehmen! | |||
'''printf("Alter: ");''' | |||
'''scanf("%d", &uiAge);''' | |||
printf("%s ist %d Jahre alt.\n", pcName, uiAge); | |||
return 0; | return 0; | ||
} | } | ||
scanf | |||
= Fehlerfälle = | |||
'''''Frage:'' Was passiert, wenn ''"A"'' als Alter angegeben wird?'''<br> | |||
'''Antwort:''' Nix! Keine Fehlermeldung, etc. Stets selber überprüfen! | |||
* Rückgabewert von ''scanf'' gibt Anzahl der erfolgreich gelesenen '''%?'''-Zeichenketten zurück | |||
* ''0'' bedeutet, keine erfolgreiche Konvertierung möglich ... | |||
#include <stdio.h><br> | #include <stdio.h><br> | ||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||
{ | { | ||
char | char pcName[255]; | ||
unsigned int uiAge; | unsigned int uiAge; | ||
printf("Name: "); | |||
scanf("%s", &pcName);<br> | |||
printf("Alter: "); | |||
if( 1 != scanf("%d", &uiAge) ) | |||
{ | |||
printf("Konnte das Alter nicht lesen!\n"); | |||
return -1; | |||
}<br> | |||
printf("%s ist %d Jahre alt\n", pcName, uiAge); | printf("%s ist %d Jahre alt\n", pcName, uiAge); | ||
return 0; | return 0; | ||
} | } | ||
= | = ENDE = | ||
Empfohlene Aufgabe: ''Taschenrechner'' + ''Kassenbon?'' | |||
= | = Dateien = | ||
Ein und Ausgabe in Dateien: Schrittfolge zum Dateibearbeiten: | |||
# Datei öffnen '''FILE fOpenedFile = fopen( ''FILE_PATH'', ''MODE'');''' | |||
#* ''FILE_PATH'' = "/usr/share/.." | |||
#* ''MODE'' = '''r'''ead, '''w'''rite oder | |||
#**'''w+''' (write+read) lesen und schreiben, Dateiinhalt wird dabei auf gelöscht | |||
#**'''r+''' (read+write) lesen und schreiben, Dateiinhalt bleibt erhalten | |||
#* '''fOpenedFile''' muss ungleich NULL sein, wenn Datei geöffnet werden konnte | |||
# Datei bearbeiten | |||
#* Schreiben: | |||
#** '''f'''printf( fOpenedFile, ''FORMAT_STRING''[, ''TYPES'']*); | |||
#** ''FORMAT_STRING'' und ''TYPES'', wie bei printf! | |||
#* Lesen: | |||
#** '''f'''scanf( fOpenedFile, ''FORMAT_STRING''[, &''TYPES'']*); | |||
#** ''FORMAT_STRING'' und ''TYPES'', wie bei scanf! | |||
# Datei schließen (Sonst kann Windows die Datei nicht in anderen Programmen lesen ...) | |||
#* '''fclose( fOpenedFile );''' | |||
'''''Frage:'' Wie lese ich die existierende ''/tmp/sample.txt'' ein?''' | |||
#include <stdio.h><br> | |||
int main(int argc, char **argv) | |||
{ | |||
// Schritt 1: Öffnen | |||
FILE* pOpenendFile = fopen("/tmp/sample.txt", "r+"); | |||
if( NULL == pOpenendFile ) | |||
{ | |||
printf("Konnte Datei nicht öffnen!\n"); | |||
return -1; | |||
}<br> | |||
// Schritt 2: Bearbeiten (lesen) | |||
char pcFileEntry[255]; | |||
if( 0 >= fscanf(pOpenendFile, "%s", &pcFileEntry) ) | |||
{ | |||
printf("Konnte Datei nicht lesen!\n"); | |||
} | |||
else | |||
{ | |||
printf("Inhalt gelesen: \"%s\"\n", pcFileEntry); | |||
}<br> | |||
// Schritt 2: Bearbeiten (schreiben) | |||
if( 0 == fprintf(pOpenendFile, "FileRead!\n") ) | |||
{ | |||
printf("Inhalt der Datei konnte nicht verändert werden\n"); | |||
} | |||
else | |||
{ | |||
printf("Datei wurde erfolgreich beschrieben!\n"); | |||
}<br> | |||
// Schritt 3: Datei Schließen | |||
fclose(pOpenendFile); | |||
} | |||
Version vom 30. August 2011, 20:55 Uhr
CKurs - Ein und Ausgabe
- DRAFT -
Wiederholung
Durch Studis zu ergänzen HelloWorld-Programm an die Tafel (Kommentare=Infos zum Erzählen)
#include <stdio.h> // Einbinden des Headers der IO-Lib
int main(int argc, char **argv) // Haupteinsprungspunkt { // Scope erwähnen? // Platz für Variablen lassen printf("Hello World!\n"); // Kurz: \n => newline, folgende Ausgabe in der nächsten Zeile return 0; }
- \n für eine Zeilenende
- \" für ein "-Symbol
- \\ für ein \-Symbol (Windows-Pfadtrenner)
dynamische Ausgabe
(Ausgabe an Tafel/Laptop)
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello World! Some Number: %d\n", 42); // Wichtig: Komma erwähnen! return 0; }
- printf benutzt das %-Zeichen zur Markierung welcher Teil des Textes ersetzt werden muss.
- nach dem %-Zeichen steht der Typbezeichner: %d steht für digit (ganzzahlige Formatierung).
- %s für Zeichenketten
- %f für Fließkommazahlen
- %% für %
Variablen
- bisher: keine Verbesserung, da %d auch einfach direkt 42 sein könnte ...
- Nutzbar auch für Variablen: (Frage: Was ist eine Variable?)
#include <stdio.h>
int main(int argc, char **argv) { int iSumOfSquares = 1 + 9 + 8 + 5; printf("Hello World! Some Number: %d\n", iSumOfSquares); return 0; }
- Frage: Was ist das Ergebnis? Warum?
- Formatierung
- %5d für 5 Zahlen mindestens
- %05d für 5 Zahlen mindestens, aufgefüllt mit Nullen
- %-5d für 5 Zahlen mindestens, linksbündig
- %-5.2f für 5 Zahlen mindestens, linksbündig, genau 2 Nachkommastellen
Beispiel (An Tafel/Laptop)
char pcName[255]; strcpy(pcName,"Mario");// #include <string.h>
unsigned uiAge = 26u; float fHeight=1.83f; float fPi = 3.1459f;
printf("%s ist %5.0fm hoch und %05d Jahre alt\n", pcName, fHeight, uiAge); printf("%s ist %-5.1fm hoch und %-05d Jahre alt\n", pcName, fHeight, uiAge);
Frage: Was ist das Ergebnis? Warum?
Mario ist 2m hoch und 00026 Jahre alt Mario ist 1.8 m hoch und 26 Jahre alt
Eingabe
- scanf wie printf
- liest stets von der Kommandozeile
#include <stdio.h>
int main(int argc, char **argv) { char pcName[255]; // Verschiebung der Eklärung auf späteres Tutorium. unsigned int uiAge; printf("Name: "); scanf("%s", &pcName); // &: Adressoperator, kommt später, immer mitnehmen! printf("Alter: "); scanf("%d", &uiAge); printf("%s ist %d Jahre alt.\n", pcName, uiAge); return 0; }
Fehlerfälle
Frage: Was passiert, wenn "A" als Alter angegeben wird?
Antwort: Nix! Keine Fehlermeldung, etc. Stets selber überprüfen!
- Rückgabewert von scanf gibt Anzahl der erfolgreich gelesenen %?-Zeichenketten zurück
- 0 bedeutet, keine erfolgreiche Konvertierung möglich ...
#include <stdio.h>
int main(int argc, char **argv) { char pcName[255]; unsigned int uiAge; printf("Name: "); scanf("%s", &pcName);
printf("Alter: "); if( 1 != scanf("%d", &uiAge) ) { printf("Konnte das Alter nicht lesen!\n"); return -1; }
printf("%s ist %d Jahre alt\n", pcName, uiAge); return 0; }
ENDE
Empfohlene Aufgabe: Taschenrechner + Kassenbon?
Dateien
Ein und Ausgabe in Dateien: Schrittfolge zum Dateibearbeiten:
- Datei öffnen FILE fOpenedFile = fopen( FILE_PATH, MODE);
- FILE_PATH = "/usr/share/.."
- MODE = read, write oder
- w+ (write+read) lesen und schreiben, Dateiinhalt wird dabei auf gelöscht
- r+ (read+write) lesen und schreiben, Dateiinhalt bleibt erhalten
- fOpenedFile muss ungleich NULL sein, wenn Datei geöffnet werden konnte
- Datei bearbeiten
- Schreiben:
- fprintf( fOpenedFile, FORMAT_STRING[, TYPES]*);
- FORMAT_STRING und TYPES, wie bei printf!
- Lesen:
- fscanf( fOpenedFile, FORMAT_STRING[, &TYPES]*);
- FORMAT_STRING und TYPES, wie bei scanf!
- Schreiben:
- Datei schließen (Sonst kann Windows die Datei nicht in anderen Programmen lesen ...)
- fclose( fOpenedFile );
Frage: Wie lese ich die existierende /tmp/sample.txt ein?
#include <stdio.h>
int main(int argc, char **argv) { // Schritt 1: Öffnen FILE* pOpenendFile = fopen("/tmp/sample.txt", "r+"); if( NULL == pOpenendFile ) { printf("Konnte Datei nicht öffnen!\n"); return -1; }
// Schritt 2: Bearbeiten (lesen) char pcFileEntry[255]; if( 0 >= fscanf(pOpenendFile, "%s", &pcFileEntry) ) { printf("Konnte Datei nicht lesen!\n"); } else { printf("Inhalt gelesen: \"%s\"\n", pcFileEntry); }
// Schritt 2: Bearbeiten (schreiben) if( 0 == fprintf(pOpenendFile, "FileRead!\n") ) { printf("Inhalt der Datei konnte nicht verändert werden\n"); } else { printf("Datei wurde erfolgreich beschrieben!\n"); }
// Schritt 3: Datei Schließen fclose(pOpenendFile); }