# Hello, It's Me

Quelle: https://dev.inf.zone/exercises/00/hello-me/

[Video auf YouTube](https://www.youtube.com/watch?v=YQHsXMglC9A)

## Aufgabe

**Auf einen Blick**

- **Was:** Ihr erstes C-Programm. Es fragt nach dem Namen und sagt dann Hallo.
- **Datei:** `hello.c` in einem Ordner `me`. Wie Sie beides anlegen, steht unten unter [Schritt für Schritt](#schritt-für-schritt).
- **Eingabe:** ein Name. Die Frage danach (etwa `What's your name? `) formulieren Sie selbst.
- **Ausgabe:** `hello, ` und der Name, danach ein Zeilenumbruch `\n`. Bei Adele also `hello, Adele`. `hello` bleibt englisch (auch `Hello` geht): Mit `Hallo, Adele` schlägt check50 fehl.
- **Abgabe:** im Ordner `me` mit `inf upload me`. Wie Sie `inf` installieren und sich anmelden, steht unten unter [Abgeben](#abgeben).

## Demo

[Terminal-Aufzeichnung ansehen](https://asciinema.org/a/Jn4egWrG0Rvuzo9d2Rs0qpkcL)

## Schritt für Schritt: Ordner und Datei anlegen

1. Öffnen Sie VS Code entsprechend Ihrem [Setup](https://dev.inf.zone/extras/setup/). Eine einfache Installation von VS Code reicht **nicht**.

2. Führen Sie `cd` in Ihrem Terminalfenster aus. Die Eingabeaufforderung sieht dann so aus:

   ```bash
   $
   ```

3. Legen Sie dort einen Ordner `me` an:

   ```bash
   mkdir me
   ```

4. Wechseln Sie in diesen Ordner. Die Eingabeaufforderung lautet danach `me/ $`.

   ```bash
   cd me
   ```

5. Legen Sie die Datei `hello.c` an und öffnen Sie sie. Das ist dasselbe, als würden Sie die Datei auf dem üblichen Weg anlegen, nur schneller.

   ```bash
   code hello.c
   ```

In diese Datei schreiben Sie Ihren Code. Für die nächste Aufgabe kommen Sie mit `cd` zurück in Ihr Homeverzeichnis und wiederholen die Schritte mit dem neuen Namen.

## Hilfestellung

Klicken Sie auf den folgenden Tipp, um einige Ratschläge zu erhalten. Versuchen Sie aber zunächst, selbst so weit wie möglich zu kommen. Wie man ein erstes Programm schreibt, kompiliert und ausführt, übt auch [Warm-up 1](https://dev.inf.zone/exercises/01/warm-ups/#warm-up-1).

**Nützliche Funktionen**

-   Einen `string` vom Benutzer bekommen Sie mit `get_string`, deklariert in `cs50.h`.
-   Einen `string` geben Sie mit `printf` aus, deklariert in `stdio.h`.
-   In `printf` steht `%s` als Platzhalter für einen `string`.

## Testen

### Kompilieren und Ausführen

Wenn Sie mit dem Programm fertig sind, kompilieren Sie `hello.c` mit:

```bash
make hello
```

Erscheint keine Fehlermeldung, hat das Kompilieren geklappt. Mit

```bash
ls
```

sehen Sie jetzt neben `hello.c` (dem Quellcode) auch `hello` (darin steht der Maschinencode).

Bei einer Fehlermeldung korrigieren Sie Ihren Code und kompilieren erneut. Verstehen Sie die Meldung nicht, hilft

```bash
help50 make hello
```

Findet `make` die Datei nicht, sind Sie wahrscheinlich im falschen Verzeichnis: Sie müssen in dem Ordner sein, in dem `hello.c` liegt, hier also `me`. Ihr aktuelles Verzeichnis zeigt der Befehl `pwd`.

Ausführen können Sie Ihr Programm dann mit:

```bash
./hello
```

So sollte das aussehen:

```
$ ./hello
What's your name? Adele
hello, Adele
```

### Korrektheit

Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihrer Arbeit zu überprüfen:

```bash
check50 -l inf-zone/exercises/2026/me
```

Dieses Kommandozeilenprogramm gibt fröhliche Gesichter aus, wenn Ihr Code die automatisierten Tests von CS50 besteht, und traurige Gesichter, wenn nicht. Damit `check50` funktioniert, muss die Datei `hello.c` heißen, und Sie müssen sich im Ordner `me` befinden.

### Style

Führen Sie den folgenden Befehl aus, um den [Stil Ihres Codes](https://dev.inf.zone/extras/style-c/) mit `style50` zu analysieren:

```bash
style50 hello.c
```

Dieses Kommandozeilenprogramm gibt Ergänzungen (in grün) und Löschungen (in rot) aus, die Sie an Ihrem Programm vornehmen sollten, um seinen Stil zu verbessern. Wenn Sie Probleme haben, diese Farben zu sehen, unterstützt `style50` auch andere [Modi](https://cs50.readthedocs.io/style50/)!

## Abgeben

Mit dieser Aufgabe geben Sie zum ersten Mal ab, mit dem Abgabewerkzeug `inf`. Ist `inf` noch nicht installiert, klappen Sie die beiden Kästen auf; haben Sie das schon erledigt, etwa im Tutorium, geht es darunter weiter.

**Zum ersten Mal: `inf` installieren**

Wie Sie `inf` installieren, hängt von Ihrer Umgebung aus dem [Setup](https://dev.inf.zone/extras/setup/) ab. Wählen Sie unten Ihre aus.

**Codespace (cs50.dev):**

Öffnen Sie im Codespace das Terminal, fügen Sie diese Zeile ein und drücken Sie Enter:

```bash
curl -fsSL https://upload.inf.zone/install | bash
```

Schließen Sie danach das Terminal mit dem Papierkorb-Symbol oben rechts im Terminalbereich und öffnen Sie ein neues (Menü ☰ → Terminal → New Terminal). Erst im neuen Terminal funktioniert alles, was `inf` mitbringt. Tippen Sie dort `inf` ein. Erscheint eine Liste der Befehle, ist alles bereit.

**Im Codespace kann `inf` wieder verschwinden.** Ab und zu wird Ihr Codespace neu erstellt (Rebuild), etwa wenn CS50 seine Umgebung aktualisiert. Dabei bleiben nur Ihre Dateien erhalten, `inf` ist danach weg. Meldet das Terminal `inf: command not found`, installieren Sie `inf` wie oben noch einmal, samt neuem Terminal. Ihre Abgaben gehen dabei nicht verloren, sie liegen auf dem Server.

**Dev Container (lokal):**

Haben Sie Ihren Dev Container mit unserer Datei von [inf.zone/devcontainer.json](https://dev.inf.zone/devcontainer.json) eingerichtet (wie in der [Anleitung](https://dev.inf.zone/extras/setup/devcontainer-local/)), ist `inf` schon installiert, auch nachdem der Container neu erstellt wurde. Sie müssen nichts tun. Tippen Sie zur Probe `inf` ins Terminal: Erscheint eine Liste der Befehle, ist alles bereit.

Meldet das Terminal `inf: command not found`, stammt Ihre `.devcontainer.json` wohl noch von cs50.dev. Richten Sie den Dev Container dann wie in der [Anleitung](https://dev.inf.zone/extras/setup/devcontainer-local/) noch einmal ein, mit unserer Datei. Ihre Dateien im Kursordner bleiben dabei erhalten.

Mit `inf update` holen Sie sich die neueste Version von `inf`, im Codespace wie im Dev Container. Nötig ist das, wenn `inf` Sie dazu auffordert.

**Zum ersten Mal: anmelden**

Bevor Sie zum ersten Mal abgeben, melden Sie sich einmal an. Tippen Sie dazu `inf login` ins Terminal. Tippen Sie gleich `inf upload`, beginnt die Anmeldung von selbst. Dann geht es so weiter:

1. `inf` fragt nach Ihrer Uni-E-Mail-Adresse. Geben Sie nur den Teil vor dem `@` ein, bei `max.mustermann@stud.uni-bamberg.de` also `max.mustermann`.
2. An diese Adresse geht eine Mail mit einem sechsstelligen Code. Tippen Sie ihn ein; er gilt zehn Minuten. Kommt keine Mail, sehen Sie im Spam-Ordner nach. Haben Sie sich bei der Adresse vertippt, brechen Sie mit `Strg + C` ab und fangen neu an.
3. Nur beim ersten Mal: Geben Sie Ihre Matrikelnummer ein, zur Kontrolle zweimal. Gemeint sind die sieben Ziffern, nicht Ihre BA-Nummer (`ba…`).
4. Nur beim ersten Mal: Wählen Sie Ihre Variante, 9 ECTS oder 6 ECTS. Sie hängt von Ihrem Studiengang ab und legt fest, welche Übungen für Ihre [Bonuspunkte](https://dev.inf.zone/extras/exam/#zwei-von-drei-übungen) zählen. Danach kann sie nur noch das Team ändern; haben Sie sich vertan, sagen Sie im Tutorium Bescheid.

Danach bleiben Sie angemeldet. `inf whoami` zeigt, mit welcher Adresse; `inf logout` meldet Sie ab. Wurde Ihr Codespace oder Dev Container neu erstellt, fragt `inf` wieder nach Adresse und Code. Die Matrikelnummer und die Variante kennt der Server dann schon.

Geben Sie im Ordner `me` ab:

```bash
inf upload me
```

Danach sehen Sie, welche Tests Ihr Programm besteht und ob die Übung für die Bonuspunkte zählt. Wie Sie `inf` installieren und sich anmelden, steht unter [Abgeben mit `inf`](https://dev.inf.zone/faq/uebung-solutions/#inf-installieren).
