Frage String von Eingabe mit Leerzeichen lesen?


Ich benutze Ubuntu und verwende auch Geany und CodeBlock als meine IDE. Was ich versuche zu tun, ist eine Zeichenfolge (wie "Barack Obama") und lege es in eine Variable:

#include <stdio.h>

int main(void)
{
    char name[100];

    printf("Enter your name: ");
    scanf("%s", name);
    printf("Your Name is: %s", name);

    return 0;
}

Ausgabe:

Enter your name: Barack Obama
Your Name is: Barack

Wie kann ich das Programm den ganzen Namen lesen lassen?


75
2018-06-08 16:37


Ursprung


Antworten:


Benutzen:

fgets (name, 100, stdin);

100 ist die maximale Länge des Puffers. Sie sollten es nach Ihren Bedürfnissen anpassen.

Benutzen:

scanf ("%[^\n]%*c", name);

Das [] ist das Scanset-Zeichen. [^\n] sagt, dass während der Eingabe ist nicht eine neue Zeile ('\n') nehmen Sie Input. Dann mit dem %*c Es liest das Newline-Zeichen aus dem Eingabepuffer (der nicht gelesen wird) und die * gibt an, dass diese eingelesene Eingabe verworfen wird (Zuweisungsunterdrückung), da Sie sie nicht benötigen, und diese neue Zeile im Puffer kein Problem für die nächsten Eingaben verursacht, die Sie möglicherweise ausführen.

Lesen Sie hier über die Scanset und das Zuweisung Unterdrückung Betreiber.

Beachten Sie, dass Sie auch verwenden können gets aber ....

Benutze niemals gets(). Denn es ist unmöglich zu sagen, ohne vorher die Daten zu kennen, wie viele Zeichen () gelesen werden und wie gets() speichert weiterhin Zeichen nach dem Ende des Puffers, es ist extrem gefährlich zu verwenden. Es wurde verwendet, um die Computersicherheit zu brechen. Benutzen fgets() stattdessen.


144
2018-06-08 16:40



Versuche dies:

scanf("%[^\n]s",name);

\n legt nur das Trennzeichen für die gescannte Zeichenfolge fest.


21
2018-06-08 16:54



Im Folgenden finden Sie ein Beispiel dafür, wie Sie mithilfe von " fgets Funktion.

#include <stdio.h>

int main()
{
    char name[100];
    printf("Enter your name: ");
    fgets(name, 100, stdin); 
    printf("Your Name is: %s", name);
    return 0;
}

5
2017-09-02 00:52



scanf(" %[^\t\n]s",&str);

str ist die Variable, von der Sie die Zeichenfolge erhalten.


3
2017-11-19 15:39



#include<stdio.h>
int main()
{
   char name[100];
   printf("Enter your name: ");
   scanf("%[^\n]s",name);
   printf("Your Name is: %s",name);
   return 0;
}

2
2018-06-26 06:29



HINWEIS: Wenn Sie fgets () verwenden, ist das letzte Zeichen im Array '\ n', wenn Sie fgets () für kleine Eingaben in CLI (Befehlszeileninterpreter) verwenden, da Sie die Zeichenfolge mit 'Enter' beenden. Wenn Sie die Zeichenfolge drucken, wird der Compiler beim Drucken der Zeichenfolge immer in die nächste Zeile wechseln. Wenn Sie möchten, dass die Eingabezeichenfolge ein null-terminiertes zeichenfolgenähnliches Verhalten aufweist, verwenden Sie diesen einfachen Hack.

#include<stdio.h>
int main()
{
 int i,size;
 char a[100];
 fgets(a,100,stdin);;
 size = strlen(a);
 a[size-1]='\0';

return 0;
}

Update: Aktualisiert mit Hilfe von anderen Benutzern.


2
2018-01-18 12:02



Mit diesem Code können Sie Eingaben vornehmen, bis Sie die Eingabetaste Ihrer Tastatur drücken.

char ch[100];
int i;
for (i = 0; ch[i] != '\n'; i++)
{
    scanf("%c ", &ch[i]);
}

1
2017-08-23 11:18



#include <stdio.h>
// read a line into str, return length
int read_line(char str[]) {
int c, i=0;
c = getchar();
while (c != '\n' && c != EOF) { 
   str[i] = c;
   c = getchar();
   i++;
}
str[i] = '\0';
return i;
}

1
2017-11-21 19:45



"%s" liest die Eingabe, bis der Leerraum erreicht ist.

bekommt ist möglicherweise ein guter Ausgangspunkt, wenn Sie eine Zeile lesen möchten (d. h. alle Zeichen einschließlich Leerzeichen, bis ein Zeilenumbruchzeichen erreicht ist).


0
2018-06-08 16:40



"Barack Obama" hat einen Abstand zwischen "Barack" und "Obama". Verwenden Sie diesen Code, um das unterzubringen.

#include <stdio.h>
int main()
{
    printf("Enter your name\n");
   char a[80];
   gets(a);
   printf("Your name is %s\n", a);
   return 0;
}

0
2018-03-26 10:52