• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C-Programmierkurs: "zweiter Tag"

Hallo,
ich habe hier die Aufgabe 5 vom zweiten Tag:

Was bewirkt das folgende Programm? (Geben Sie es ein und starten Sie es.)

1: /* Ueb2-5.c */
2: #include <stdio.h>
3: #include <string.h>
4: int main()
5: {
6: char puffer[256];
7:
8: printf( "Bitte Name eingeben und <Eingabe> druecken:\n");
9: fgets( puffer,256,stdin );
10:
11: printf( "\nIhr Name enthält %d Zeichen (inkl. Leerzeichen).",
12 strlen( puffer ));
13:
14: return 0;
15: }

Und das habe ich davon gemacht:

/*Ueb25.c*/
#include<stdio.h>
#include<string.h>
int main()
{
char puffer[256];

printf("Bitte Name eingeben und <Eingabe>drücken:\n");
fgets( puffer,256,stdin );

printf("\nIhr Name enthält %d Zeichen (inkl. Leerzeichen).\n", strlen( puffer ));
return 0;
}

Und dieses Programm zählt eins zu viel! Wenn ich mir das so anschaue, dann kann ich mir nicht vorstellen, das die Funktion strlen einen falschen Wert ausgibt. (Ich kann das jetzt leider nicht nachprüfen. Ich habe kein C-Buch. Ich besorg mir aber eins.)
Ich vermute jetzt, der Fehler entsteht beim Gebrauch der Konsole. Wenn ich etwas eingebe, dann springt der Curser gleich weiter. Dann erst kann ich <Eingabe> drücken. Möglicherweise enthält puffer dadurch ein Zeichen mehr.

Der zweite Tag ist ganz schön umfangreich.

Viele Grüsse
Mumie
 
das zeichen, was "zuviel" ist, ist das Neurzeile-zeichen '\n'.
das kannst du auch wie folgt "sehen":

Code:
char *nl = "\n";
if (strstr(puffer, nl) != NULL)
   printf("Neuzeilezeichen gefunden");


greets }-Tux-{
 
1. kannst Du das nicht einem c-kurs-Thread abhandeln?

2. dieser Kurs ist scheiße, wenn dort die Übungsaufgaben nicht gescheit vorbereitet und nachbereitet werden.
 
TeXpert schrieb:
2. dieser Kurs ist scheiße, wenn dort die Übungsaufgaben nicht gescheit vorbereitet und nachbereitet werden.
hmm evtl. hat er die antworten blos nicht gefunden? :wink:
http://wwwuser.gwdg.de/~kboehm/ebook/31_anh_c_w6.html#79812
 
Ich habe sämtliche \n aus dem Programm entfernt. Es zählt immernoch falsch.

Wenn ich ein q eingebe, dann bin ich der Meinung, es sei nur ein
Zeichen. Das Programm zählt aber 2 Zeichen. Wenn ich qwert eingebe, dann zählt das Programm 6 Zeichen. Ich will höflich sein: Das Programm zählt fast richtig!


Ich habe den zweiten Tag auch so mehr oder weniger durch.
Ich bedanke mich für die Hilfe.

Viele Grüsse
Mumie
 
das '\n' entsteht beim drücken der eingabetaste. Dadurch wird das neuzeile zeichen noch in den puffer geschrieben.


<edit>
hier mal ein kleines beispiel, wie du das '\n' aus dem string entfernst (es gibt bestimmt auch einen anderen weg :) ):

Code:
/* Neuzeile zeichen aus puffer loeschen */
puffer[strlen(puffer)-1] = '\0';
printf("%d", strlen(puffer));
hier wird das Neuzeile zeichen einfach mit '\0' (welches das string ende kennzeichnet) überschrieben. Jetzt wird auch korrekt gezählt :)

</edit>

greets }-Tux-{
 
Oben