2017-04-20 11 views
0

Même si j'utilise cette condition dans scanf("[^\n]s", x), ou "%34[^\n]", ou %127s, je suis incapable d'obtenir des réponses correctement. Est-il un problème avec la zone scanf ou dans une autre partie ....Comment lire les espaces blancs avec scanf

#include <stdio.h> 

int main() 
{ 
    int i = 4; 
    double d = 4.0; 
    char s[] = "hello "; 
    int a; 
    double b; 
    unsigned char string_2[100]; 
    scanf("%d",&a); 
    scanf("%lf",&b); 
    scanf("%[^\n]s",string_2); 
    printf("%d",a+i); 
    printf("\n%lf",d+b); 
    printf("\n%s",s); 
    printf("%s",string_2); 
    return(0); 
} 
+2

'scanf ("% lf", &b); scanf ("% [^ \ n] s ", chaîne_2);' -> 'scanf ("% lf ", &b); while (getchar()! = '\ n'); scanf ("% 99 [^ \ n] ", string_2); ' – BLUEPIXY

+0

ouais cela a fonctionné l'homme ... awsome ....... – Nivethithan

Répondre

1

Ne pas utiliser scanf comme ça.

Dans ce:

scanf("%lf",&b); 
scanf("%[^\n]s",string_2); 

Le premier scanf lit un numéro de l'entrée, mais doit attendre que votre terminal pour donner au programme une ligne complète d'entrée en premier. Supposons que l'utilisateur 123, le programme lit 123\n à partir du système d'exploitation.

scanf voit le saut de ligne qui ne fait pas partie du numéro plus, et arrête à ce laissant le saut de ligne dans le tampon d'entrée (à moins de stdio). La seconde scanf essaie de lire quelque chose qui n'est pas un saut de ligne, mais ne peut pas le faire, car la première chose qu'il voit est une nouvelle ligne. Si vous vérifiez la valeur de retour des appels scanf, vous verrez que le second scanf renvoie un zéro, c'est-à-dire qu'il n'a pas pu terminer la conversion demandée.

Au lieu de cela, lisez les lignes pleines à la fois, avec fgets ou getline:

#include <stdio.h> 
int main(void) 
{ 
    char *buf = NULL; 
    size_t n = 0; 
    double f; 
    getline(&buf, &n, stdin); 
    if (sscanf(buf, "%lf", &f) == 1) { 
     printf("you gave the number %lf\n", f); 
    } 
    getline(&buf, &n, stdin); 
    printf("you entered the string: %s\n", buf); 
    return 0; 
} 

Pour une discussion plus, voir: http://c-faq.com/stdio/scanfprobs.html