Bin mir bewusst, dass der Unterschied zwischen scanf() und gets() Funktion ist, dass scanf() den Eingabe-String weiter liest, bis es auf ein Leerzeichen trifft, während gets() weiter liest Eingabezeichenfolge, bis ein \ n oder EOF (Ende der Datei) gefunden wird.c Programmierung: (scanf und gets)
Um diesen Unterschied in Aktion zu sehen, habe ich versucht, ein Beispiel auf meinem eigenen Schreiben, das wie folgt lautet:
#include <stdio.h>
int main()
{
char a[20];
printf("enter the string\n");
scanf("%s",&a);
printf("the string is %s\n",a);
char b[20];
printf("enter the string\n");
gets(b);
printf("the string is %s\n",b);
return 0;
}
Wenn die Variable a die Zeichenfolge „Manchester United“ als Eingabe gegeben wurde, wurde die Ausgabe:
enter the string
manchester united
the string is manchester
enter the string
warning: this program uses gets(), which is unsafe.
the string is united
Was ich erwartet hatte als Ausgabe nur der erste Teil der die manchester und dann ist eine auf die Variable angegebene Zeichenfolge war, mich das Programm auffordert, die neue Eingabezeichenfolge für die Variable b einzugeben. Stattdessen endete ich mit der oben angegebenen Ausgabe.
basierend auf der Ausgabe, was ich verstehe ist:
Es kann, dass so bald sehen, wie scanf(), um die Leerzeichen trifft, stoppt er die Zeichenfolge danach, Lesen und somit den verbleibenden Teil des Zeichenfolge : united, wurde der Variablen b zugewiesen, auch wenn das Programm nicht dazu auffordert, die Zeichenfolge für die Variable b einzugeben.
Wie spüe ich den verbleibenden Teil (der Teil nach dem Leerzeichen) der Zeichenfolge, die Variable a?
so dass ich eine ganz neue Eingabezeichenfolge für die Variable b eingeben kann.
Jede weitere Erklärung, was auch hier in der Ausführung des Codes passiert, wird sehr geschätzt.
Entschuldigung für die sehr grundlegenden Fehler (wie aus den Antworten hervorgeht) !! Nur ein Anfänger bis C-Programmierung :)
Zu allererst und vor die Frage lesen, 'gets()' sollte nicht verwendet werden, und es hat sich in den letzten Versionen des [veraltet Tag: c] Standard. Ihr Code hat auch mehrere andere Probleme, wie die Verwendung von '&' operator, um ein Array für einen '"% s "' Spezifizierer an 'scanf()' zu übergeben. Wenn der Compiler, (* oder runtime ?, da ich niemals 'gets() verwenden würde' ich wusste nicht, dass es eine Warnung gab *) eine Warnung ausgibt, warum benutzt du sie weiter? –
** Niemals ** benutzen 'gets'! Es wurde sogar vom C-Standard entfernt, was wirklich ein seltenes Ereignis ist. – Olaf
'scanf ("% s ", b)' == 'bekommt (b)' == ein Loch, durch das dein Benutzer abstürzen oder die Kontrolle über dein Programm übernehmen kannst – PSkocik