scanf und printf
-
Hallo
Ich beschäftige mich seit langen mal wieder mit C und bin bei meinen Unteralgen auf einige Tutorials gestoßen.Eins davon hab ich umgeschrieben jedoch erhalte ich nicht die gewünschte Ausgabe:
Tutorial 1 :
/* printf1.c */
#include <stdio.h>
int main(void) {
int zeichen;
zeichen = printf("Hallo Welt");
printf(" enthaelt %d Zeichen\n", zeichen); // 10 Zeichen
return 0;}Wie leicht zu erkennen wird hier "Hallo Welt enthaelt 10 Zeichen" ausgegeben.
Ich wollte das Programm so umschreiben das ich, erst etwas Eingebe, und dann diese Eingabe gezählt wird.
Mein Programm:
include <stdio.h>
int main(void) {
int zeichen;
printf("Bitte Zeichen eingeben:\n")
scanf("%c",&zeichen);
printf(" Die Eingabe enthält %d Zeichen\n",zeichen);
return 0;
}Das gibt immer "100" aus
dann habe ich es hiermit versucht
include <stdio.h>
int main(void) {
int zeichen,a;
printf("Bitte Zeichen eingeben:\n")
a=scanf("%c",&zeichen);
printf(" Die Eingabe enthält %d Zeichen\n",a);
return 0;
}Dann bekomme ich immer "1" raus.
Kann mir jemand bitte erklären wieso diese Ausgaben rauskommen, und wie es richtig heißen muss?
Das ist doch für Euch bestimmt ein Leichtes.DAnke
A. aus B.
-
Bei der letzten Version bist du schon auf dem richtigen Weg. Du musst aber noch wissen, dass %c für ein einzelnes Zeichen steht und daher eben auch nur eines eingelesen wird und du daher immer 1 erhältst. Außerdem passt int nicht zum Zeichentyp, dieser wäre char. Und für eine ganze Zeichenkette nimmt man ein char-Array (und scanf liest Zeichenketten mit %s ein). Aber am besten guckst du dir erst einmal in einem (guten!) C-Buch die Kapitel über Ein- und Ausgabe, Variablen und über Zeichenketten an. Du machst hier noch vieles falsch. Und Internettutorials sind oftmals nicht wirklich gut.
-
Hier im Forum gibt es C Codetags, schon mal gesehen?
"%c" bei scanf bedeutet "lies ein Zeichen" und das macht er auch.
"%s" bei scanf bedeutet "lies mehrere Zeichen" und liest bis zum 1. whitespace.
scanf liefert als Rückgabewert die Anzahl der erfolgreich gemäß Formatstring gelesenen Werte zurück, d.h. bei dir also 1. (du hast genau 1 Formatspezifizierer in deinem Formatstring).int anzahl; char s[100]; printf("Bitte Zeichen eingeben:\n"); scanf("%99s",s); anzahl = printf(s); printf(" enthaelt %d Zeichen\n", anzahl);
-
Alles klar hab verstanden.
Empfehlungen für gute Bücher? SeppJ
Funktioniert Wutz danke
-
Zzz2311 schrieb:
Empfehlungen für gute Bücher? SeppJ
Der Klassiker wäre der K&R. Ist aber nicht ganz einfach, dafür gut.
The C Programming Language | ISBN: 0131103628Finger weg von Jürgen Wolf (viele grobe Fehler und schlechte Angewohnheiten, die man als Anfänger nicht bemerkt und nie richtig los wird), Büchern für Dummies (sonst wirst du selber einer) und, wenn man sehr kritisch ist, gleich von den ganzen Verlagen die solche Bücher auflegen.
edit: Und falls dein Englisch noch nicht gut genug ist (zum Programmieren wirst du mittelfristig flüssig Englisch lesen müssen), gibt's den K&R sicher auch auf Deutsch.
edit2: Oha, den Kritiken bei Amazon zufolge ist die Übersetzung grauenhaft.
-
ahh ok vom wolf war auch das beispiel.
ok werde die finger davon lassen und mir k&r besorgen.
mein english ist sowieso besser als mein deutsch.
danke fuer die hilfe