Drucken Sie eine Zeichenfolge in C mit einer Funktion
Ich bin ganz neu in C und versuche zu lernen, wie man ein string und drucken Sie es mit einer Funktion. Ich sehe Beispiele überall mit while(ch = getchar(), ch >= 0)
, aber sobald ich es in eine Funktion (anstelle von main()), hört er auf zu arbeiten. Jetzt steckt Sie in einer endlos-Schleife... warum ist das so?
//from main():
//printString("hello");
void printString(char *ch)
{
while (*ch = getchar(), *ch >= 0)
putchar(*ch);
}
- Gibt es einen Grund, wir können nicht printf?
- getchar() liest Eingaben von der Standardeingabe. Willst du das, oder willst du print "Hallo"?
- Ich bin eigentlich Los, um die Manipulation der Daten durch analysieren einer vertikalen Strich getrennte Datei in Spalten 15 Zeichen, aber ich wollte Sie ziehen den code aus der main und legen Sie Sie in eine Funktion und ich war einfach nur erstickt auf, wie eine Schleife durch einen string von stdin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihre Beschreibung, die Sie gerade wollen:
Ihre ursprüngliche Funktion:
Macht eine Menge Zeug:
in der ersten char-Spitzen, von
ch
(das kann auch nicht funktionieren, wenn Sie übergeben einen string-literal.getchar()
liest Benutzer-Eingaben von stdin. Wenn Sie möchten, drucken Sie die Zeichenfolge, die übergeben wird, dann gibt es keine Notwendigkeit fürgetchar()
.Nehmen Sie es Schritt für Schritt. Die Schleife Sie liest ein Zeichen aus stdin, bis es erreicht das Ende der Datei. Das ist es, was die
ch >= 0
test prüft: halten Sie zu Lesen, so lange, wie wir immer sind gültige Zeichen. Für den Druck der Zeichen von einem string, der Zustand ändert. Jetzt ein gültiges Zeichen ist alles, was nicht NUL ('\0'
). So ändern wir die Schleife Bedingung:Nächsten ist, herauszufinden, die Schleife.
putchar(*ch)
ist es gut; lassen wir das es gibt. Aber ohnegetchar()
wir müssen herausfinden, was die entsprechende Anweisung "erhalten Sie das nächste Zeichen" ist.Wäre
ch++
. Dies fördert diech
Zeiger auf das nächste Zeichen in der Zeichenkette. Wenn wir setzen, dass am Ende der Schleife dann drucken wir ein Zeichen, Voraus zu einem Raum, und überprüfen Sie dann, ob das nächste Zeichen ungleich NUL. Wenn es dann drucken wir es, Voraus, und überprüfen.*ch != '\0'
zu*ch
, was bedeutet genau das gleiche; und es ist auch möglich, schreiben Sie den Körper in einem einzigen Befehlputchar(*ch++);
- verstehen, warum das möglich ist, ist unerlässlich, wenn man zu begreifen, die das Verhalten von++
in C.Was hier passiert, ist die folgende:
main
rufen SieprintString
mit einem Zeiger auf die Zeichenfolge "Hallo"printString
Funktion zu Lesen versucht, ein Zeichen mitgetchar()
Die Regeln der Sprache sagen, dass der Versuch der Veränderung, die 'h' ist Undefiniert Verhalten. Wenn Sie Glück haben, dein Programm stürzt ab, wenn Sie sehr unglücklich wird, erscheint das Programm funktioniert.
Kurz:
getchar()
ist zum Lesen verwendet;putchar()
ist für das schreiben genutzt.Und Sie möchten, schreiben 5 schreiben: 'h', 'e', 'l', 'o' und ein weiteres 'o'.
Gibt es etwas nach, der Letzte 'o'? Es ist! Ein
'\0'
. Die null-byte beendet die Zeichenkette. So versuchen, diese (mitprintString("hello");
) ...Oder Sie können schreiben, dass in eine Schleife (und Aufruf von main mit verschiedenen Argumenten) ...
Würde ich nur tun
printf("%s",str);
oderputs(str);
puts
. Nicht verwenden, ein Elefant-Gewehr zu töten einen floh.puts
fügt die\n
am Ende bedingungslos. Könnten Sie es wollen, oder Sie vielleicht nicht haben wollen.fputs
weder fügt ein abschließendes newline, noch verschwendet Zeit Analyse alle format-string, also das beste wäre.