web-dev-qa-db-fra.com

Que signifie% [^\n] en C?

Que signifie %[^\n] en C? Je l'ai vu dans un programme qui utilise scanf pour prendre plusieurs mots dans une variable chaîne. Je ne comprends pas bien parce que j'ai appris que scanf ne peut pas prendre plusieurs mots.

Voici le code:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char line[100];
    scanf("%[^\n]",line);
    printf("Hello,World\n");
    printf("%s",line);
    return 0;
}
3
Salman Sadi

[^\n] est une sorte d'expression régulière.

  • [...]: il correspond à une séquence non vide de caractères du scanset (un ensemble de caractères donné par ...).
  • ^ signifie que le scanset est "inversé": il est donné par son complément .
  • ^\n: le scanset est composé de tous les caractères sauf \n.

De plus, fscanf (et scanf) lira la plus longue séquence de caractères saisis correspondant au format.

Donc scanf("%[^\n]", s); lira tous les caractères jusqu’à atteindre \n (ou EOF) et les mettre dans s. Il est courant de lire toute une ligne en C.

Voir aussi §7.21.6.2 La fonction fscanf .

7
md5
scanf("%[^\n]",line);

signifie: numériser jusqu'au \n ou une touche entrée.

2
vitaly-t
scanf("%[^\n]",line);

Lit les entrées de l'utilisateur jusqu'à ce que vous appuyiez sur entrée ou qu'un caractère de nouvelle ligne soit ajouté (\n) et le stocke dans une variable nommée ligne. 

1
Bill Wang