2016-11-05 3 views
0

J'ai une question avec sscanf fonction C.sscanf pas d'espace de travail de stdin

Mon programme

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

int main(){ 
    char str[50]; 
    int y=0, x=0; 

    printf("Insert string: "); 
    scanf("%s", str); 
    sscanf(str, "%d %d", &x, &y); 
    printf("x:%d y:%d\n",x,y); 
    return 0; 
} 

Entrée

10 20 

Sortie

x:10 y:0 

J'ai aussi essayé

sscanf(str, "%d%d", &x, &y); 

et

sscanf(str, "%d%*[ \n\t]%d", &x, &y); 

mais la sortie est le même.

La chose étrange est que lorsque je tente

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

int main(){ 
    char str[] = "10 20"; 
    int y=0, x=0; 

    sscanf(str, "%d %d", &x, &y); 
    printf("x:%d y:%d\n",x,y); 
    return 0; 
} 

ma sortie est x:10 y:20

+2

si vous la sortie de votre 'str' après la' scanf ("% s", str) ', vous trouverez le poblem. – WhatsUp

+1

'% s' arrête de lire l'entrée au premier caractère d'espace. –

Répondre

1

Ce n'est pas parce sscanf faute, c'est que scanf ignorer les espaces blancs.

Comme indiqué plusieurs fois (How do you allow spaces to be entered using scanf?), vous devez utiliser fgets à la place pour obtenir une entrée de chaîne.

donc remplacer scanf("%s", str); avec la ligne ci-dessous fonctionnerait:

fgets(str, 50, stdin);