Programmieren – Grundlagen von C: Einlesen von Daten

Wörter sind schon etwas Feines, man kann mit ihnen Informationen austauschen.
Ob sachlich oder ganz persönlich, ohne Wörter würde man wahrscheinlich noch in der Steinzeit leben.
In dem zweiten Teil dieser Artikelserie geht es deshalb um den Datentypen char und das einlesen von Daten.
Zusätzlich wird der Begriff Array im Zusammenhang mit Text angesprochen sowie das zuweisen von Werten bei Variablen.

Datentyp Char

Um Zeichen, wie zum Beispiel Buchstaben, in C zu benutzen, gibt es den Datentypen char.
Variablen deklariert man in der Programmiersprache C über den Syntax char.
Konstanten von dem Typ char werden immer in Hochkommata (‚) eingeschlossen, so auch beim zuweisen von Werten.

char Buchstabe;

Arrays und Zeichenketten

Um ganze Wörter zu verwenden, benötigt man eine Zeichenkette (engl. string) welche im Grunde ein Array vom Typ char ist.
Dies kann man sich in etwa, wie eine Aneinanderreihung von Elementen, in diesem Fall Zeichen, vorstellen kann.
Im Gegensatz zu einigen anderen Programmiersprachen gibt es unter C keinen eigenen Datentyp für Zeichenketten.
Dabei muss man beachten, das standardmäßig in Zeichenketten keine Sonderzeichen, wie beispielsweise Umlaute, vorkommen dürfen.

Ein Array wird deklariert, indem man eine Variable anlegt, mit der Besonderheit, dass direkt hinter dem Variablennamen, zwischen zwei eckigen Klammern die Anzahl der gewünschten Elemente steht.
Nach dem Inhalt eines Arrays folgt die binäre Null. Sie signalisiert das Ende des Datenstromes, vergleichbar mit dem Punkt nach dem Satzende.
Manuell setzten muss man die binäre Null bei Zeichenketten nur in wenigen Fällen, da dies normalerweise von den Funktionen in C getan wird.

Dabei muss beachtet werden, dass die Anzahl an Elementen zwar bei 0 anfängt, jedoch immer die binäre Null mit eingerechnet werden muss.
Was bedeutet, bei 10 Feldelementen wird ein Array mit der Anzahl von 10 angelegt.
Die jeweiligen Elemente sind dann von 0 bis 9 erreichbar und Feldelement 10 ist die binäre Null.

Variablen für Zeichenketten deklariert man über den folgenden Syntax:

char Wort[5];

/* Beispiel: Array */
Wort = "Hallo";

/*
	Wort[0] = H
	Wort[1] = a
	Wort[2] = l
	Wort[3] = l
	Wort[4] = o
	-----------------
	Wort[5] = \0 (binäre Null)
*/

Konstanten

Häufig braucht man beim programmieren Werte die sich während des Programmablaufs nicht ändern.
Dazu verwendet man sogenannte Konstanten, welche das Gegenstück zu Variablen darstellen.

Typ Konstante
int z.B. 1 oder 4
char z.B. ‚a‘ oder ‚h‘
Zeichenkette z.B. „Hallo“ oder „Wort“

Variablen

Variablen sind mit das Wichtigste in der Programmierwelt, sie ermöglichen einem Informationen während des Programmablaufs bereitzuhalten.
Aus der Mathematik kennen viele bereits den Begriff der Variablen, man rechnet oft mit x oder y.
Beim Programmieren verhält sich dies sehr ähnlich zu der Mathematik, die Variablen gelten auch hier nur so lange dass Programm läuft (bzw. nur für eine Funktion).
Variablen haben immer einen vorher festgelegten Datentypen, ein paar sind bereits vorgestellt worden, und ihnen kann man einen Wert zuweisen.

In C gibt es einige Regeln die man einhalten muss, um Variablen nutzen zu können.
So dürfen Variablennamen nur maximal 31 Zeichen lang sein und ausschließlich aus den Buchstaben a-z und A-Z sowie Ziffern und dem Unterstrich (_) bestehen.
Ziffern dürfen nicht am Anfang stehen. Der Name ist zwar beliebig aber es wird allgemein empfohlen sinngemäße Namen zu wählen (z.B. summe, ergebnis, name, etc.).
Auch ist C hierbei case-sensitive, was bedeutet das die Groß- und Kleinschreibung, ähnlich wie bei Passwörtern, wichtig ist.
Beispielsweise ist die Variable mit dem Namen Regen eine andere, als die mit dem Namen regen.

char Name; /* Variable wird angelegt (deklariert) */
Name = 'T'; /* Der Variable wird ein Wert zugewiesen (definiert) */

Variablen Werte zuweisen

Damit man Variablen richtig nutzen kann, muss man sie nicht nur deklarieren, sondern ihnen auch Werte zuweisen.
Beim Zuweisen nimmt der Wert einer Variable entweder den Wert einer anderen Variable oder den einer Konstanten an.
Dafür wird der Variablenname der zuzuweisenden Variable auf die linke und der Wert auf die rechte Seite von dem Gleichheitszeichen geschrieben.
Dies funktioniert im Eigentlichen, wie in der Mathematik (x=1) und im Sprachjargon wird das Zuweisen auch als definieren bezeichnet.

char Buchstabe;
Buchstabe = 'a';

int x;
x = 1;

Einlesen von Werten

Da man bei einem Programm, im herkömmlichen Sinne, nicht jedes mal den Quelltext abändern möchte um andere Werte zu benutzen, nutzt man z.B. die Funktion scanf aus der Standardbibliothek stdio.h.
Beim Aufrufen benötigt scanf zwei Argumente. Der erste Parameter ist eine Zeichenkette welcher den einzulesenden Datentyp in der gleichen Form wie bei printf (Platzhalter) bereithält.
Bei dem zweiten Argument wird ein sogenannter Zeiger (engl. pointer) auf die Variable, in die der Wert geschrieben werden soll, angegeben.

Ein Pointer kann man sich wie einen Link im Internet vorstellen, die eigentliche Seite liegt zwar nicht auf dem eigenem Server, jedoch ein Verweis auf den jeweiligen Server.
Nach diesem Prinzip ist ein Zeiger ein Link auf die Speicherstelle der Variable im Arbeitsspeicher, womit sie dann, von anderen Funktionen aus bearbeitet werden kann.
Um einen Pointer anzugeben, wird beim Verwenden einfach vor dem Variablennamen ein kaufmännisches Und (&) gesetzt.

char Buchstabe;
scanf("%c", &Buchstabe);

Kommentare im Quelltext

Um nicht die Übersicht zu verlieren und Informationen darzustellen, gibt es sogenannte Kommentare.
Diese werden in C über den Syntax /* begonnen und müssen mit */ wieder aufhören, die Länge ist dabei beliebig.
Normalerweise ist die Schachtelung von Kommentaren nicht erlaubt.

Bei einigen Editoren gibt es mit der Syntaxhervorhebung auch die Funktion in Kommentaren etwas zu markieren.
Häufig sind dies die Begriffe INFO und TODO.

/* Dies ist ein Kommentar */
/* INFO: Dies ist eine Info. */
/* TODO: Dies ist eine Aufgabe. */

Beispielprogramm

Im Folgenden wird ein Beispielprogramm mit den vorhin oder in der Vergangenheit, erklärten Elementen vorgestellt.
Dabei wird immer die gesamte Datei in dem Codeblock repräsentiert, der dazugehörige Dateiname steht immer unter diesem.
Wie man den Quellcode kompiliert, kann man in Teil 1 nachlesen.

#include <stdio.h>

int main()
{
	/* Variable Namen anlegen: Array mit 20 Elementen */
	char Name[20];
	
	/* Anweisung ausgeben */
	printf("Geben sie ihren Vornamen ein (Maximal 20 Zeichen): ");
	
	/* Name einlesen */
	scanf("%s", &Name);
	
	/* Name ausgeben */	
	printf("\nSie heißen: %s\n", Name);

	return 0;
}

Datei: main.c

Legende

Als binär bezeichnet man Daten, die im dualen Zahlensystem gehalten sind, also 1 oder 0.

Aufgabe

Damit man in der Zeit zwischen den einzelnen Teilen, etwas zum Üben hat, habe ich beschlossen ab jetzt bei jedem Teil eine Aufgabe zum Thema zu stellen.
Die Lösung steht dann immer in dem darauf folgenden Teil, sodass man sie mit seiner vergleichen kann.
Passend zum Thema, lautet die Aufgabe ein Programm zu schreiben, welches Vorname, Nachname und die Stadt abfragt und dann einen Satz nach dem folgenden Muster ausgibt.

Max Mustermann wohnt in der Stadt Musterhausen.

Ausblick

Im nächsten Teil geht es um dass rechnen mit Zahlen und wie man in C Fließkommazahlen benutzt.
Es wird in Zukunft voraussichtlich jede Woche ein neuer Teil erscheinen.

Fazit

In diesem Teil hat man gelernt, wie man in C mit Text umgehen kann und einiges mehr.
Was manchem beim Lesen auf den ersten Blick komplex erscheint, ist eigentlich recht simple.
Man könnte nun beispielsweise Programme für das Bilden von Texten programmieren.

Veröffentlicht von

Marc Volker Dickmann

Schreibt über alles was ihn Interessiert und beschäftigt. Startet regelmäßig neue Projekte.

6 Gedanken zu „Programmieren – Grundlagen von C: Einlesen von Daten“

  1. Ich bin beileibe kein C-Experte, aber ich habe viel Erfahrung mit anderen Programmiersprachen. Heist char wort[5] nicht: ein Array mit 5 Elementen, indiziert über die Indizes 0-4 (einschließlich)? Das heißt wort[5] = ... wäre eigentlich ein Fehler, weil es auf den sechsten Eintrag des Arrays zugreift? Dementsprechend braucht es für einen String der Länge n ein Array der Länge n+1.

    Desweiteren würde die Zuweisung wort[5] = "Hallo"; Den String an die 6 Stelle des Arrays schreiben – also die Einträge 6-11 (Indizes 5-10) belegen. Korrekt wäre char wort[6]; wort = "Hallo";. Alles andere dürfte Speicherprobleme verursachen, was (wenn man es auf die Spitze treibt) zu Null-Pointern, Stack- und Buffer-Overflows, und somit zu Sicherheitslücken führt.

  2. Danke für die Fortsetzung. Beim Absatz „Variablen“ ist Dir ein kleiner Fehler unterlaufen. Und zwar schreibst du im Code einmal „Namen“ und einmal „Name“.

  3. Meiner Meinung nach ist C keine gute Sprache für Einsteiger. Wenn man nicht vorher von der Hardware-Seite der Informatik kommt, läuft man sehr schnell in potentielle Probleme hinein, die durch die Ausrichtung von C bedingt sind. Der Fokus von C auf Hardware-Nähe führt dazu, dass einige potentielle Fehlerquellen vom Programmierer beachtet werden müssen. Die Klassiker sind sicherlich Buffer Overflows, Use-After-Free, und memory leaks.

    Vielleicht könntest man die Stärken und Schwächen von C in einem der nächsten Einträge behandeln. Man könnte das auch teilweise an dem heutigen Beispiel aufziehen. Was passiert, wenn sich jemand nicht an den Vorschlag mit den 20 Zeichen hält? Es ist tatsächlich nur ein Vorschlag, da die „Einschränkung“ in keiner Weise durchgesetzt wird.

    Im Übrigen bin ich der Meinung, dass der Begriff „Fließkommazahlen“ total sinnlos ist und durch den Begriff „Gleitkommazahlen“ ersetzt werden muss.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.