Scanf String mit Leerzeichen in C
-
Verwendung von
RegEx
inscanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten -
Verwenden Sie
%[^\n]s
inscanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten -
Verwenden Sie
%[^\n]%*c
inscanf
um Benutzereingaben mit Leerzeichen in C zu erhalten -
Verwenden Sie
gets()
inscanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten
In diesem Artikel wird der Dateideskriptor in der Programmiersprache C erläutert.
Beim Sammeln von Benutzereingaben ignoriert scanf()
in den meisten Fällen Dinge wie Leerzeichen, Backslashes, Tabulatoren usw.; Wir können diese Einschränkung jedoch umgehen, indem wir Scanset-Spezifizierer verwenden. Die Scanset-Bezeichner werden durch die Notation %[]
gekennzeichnet.
Indem wir es in diesen eckigen Klammern ausdrücken, können wir ein Zeichen oder eine Zeichenfolge schreiben, je nachdem, was wir erreichen möchten.
Die Programmiersprache C bietet verschiedene Möglichkeiten, wie wir Eingaben vom Benutzer erhalten können, während die darin enthaltenen Leerzeichen erhalten bleiben. Schauen wir uns einige Beispiele an, um es zu implementieren.
Verwendung von RegEx
in scanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten
Dieses %[]
ist ein Scanset-Bezeichner, und die Verwendung von 0-9, a-z, einem Leerzeichen
und A-Z
bedeutet, dass nur diese Zeichen als Eingabe verwendet werden dürfen. Nichts anderes kann verwendet werden.
Das s
zeigt an, dass der Computer eine Zeichenkette als Eingabe akzeptiert.
Quellcode:
#include <stdio.h>
int main(int argc, char const *argv[]) {
char name[20];
printf("Please enter your full name: ");
scanf("%[0-9a-zA-Z ]s", name);
printf("\nYour name is: %s", name);
return 0;
}
Ausgang:
Please enter your full name: Saad Aslam
Your name is: Saad Aslam
Verwenden Sie %[^\n]s
in scanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten
Das Scanset-Zeichen für diese Instanz ist [].
Das Zeichen ^\n
weist das Betriebssystem an, weiterhin Benutzereingaben zu lesen, bis eine neue Zeile gefunden wird.
In diesem Fall haben wir uns den XOR-Operator zunutze gemacht, der wahr zurückgibt, es sei denn, zwei Buchstaben sind identisch. Nachdem festgestellt wurde, dass es sich bei dem Zeichen um eine neue Zeile \n
handelt, gibt der XOR-Operator ^
falsch zurück, wenn die Zeichenfolge gelesen wird.
Daher schreiben wir es als %[n]s
und nicht als %s
. Um eine Eingabezeile zu erhalten, die Leerzeichen enthält, können wir daher Folgendes verwenden:
scanf("%[n]s", str);
Quellcode:
#include <stdio.h>
int main() {
char str[100];
printf("Please enter your full name: ");
scanf("%[^\n]s", str);
printf("\nYour name is: %s", str);
return 0;
}
Ausgang:
Please enter your full name: Saad Aslam
Your name is: Saad Aslam
Verwenden Sie %[^\n]%*c
in scanf
um Benutzereingaben mit Leerzeichen in C zu erhalten
In diesem Fall ist das Scanset-Zeichen [].
Das Zeichen ^\n
weist das Betriebssystem an, weiterhin Eingaben entgegenzunehmen, bis eine neue Zeile gefunden wird.
Dann liest es mit dem %*c
das Newline-Zeichen, und das hier verwendete *
zeigt an, dass dieses Newline-Zeichen von der Ausgabe ausgeschlossen wird.
Quellcode:
#include <stdio.h>
int main() {
char str[20];
printf("Please enter something: ");
scanf("%[^\n]%*c", str);
printf("\nYou entered: %s", str);
return 0;
}
Ausgang:
Please enter something: Writer at Delft Stack
You entered: Writer at Delft Stack
Verwenden Sie gets()
in scanf
, um Benutzereingaben mit Leerzeichen in C zu erhalten
Die in der C-Bibliothek enthaltene Funktion char *gets(char *str)
liest eine Zeile aus der Standardeingabe (stdin
) und speichert sie in dem String, auf den str
verweist. Es hält an, wenn das Zeilenumbruchzeichen gelesen wird oder wenn das Ende der Datei erreicht ist, je nachdem, was zuerst eintritt, je nach den Umständen.
Quellcode:
#include <stdio.h>
int main() {
char str[50];
printf("Please enter your name: ");
gets(str);
printf("\nYour name is: %s", str);
return (0);
}
Ausgang:
Please enter your name: Saad Aslam
Your name is: Saad Aslam
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn