Scanf et chaine de caracteres avec espaces

Résolu
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai un problème lorsque j'utilise scanf pour lire une chaine de caractères contenant des espaces. avec l'utilisation de fgets ça marche, sauf que Linux renvoit un message me signalant que cette fonction est dangeureuse. j'opte alors pour le scanf.
voici mon code
#include <stdio.h>
#include <stdlib.h>

int main(){
    char *nom;
    nom=(char*)malloc(sizeof(char)*50);
    printf("Entrez votre nom et prenom : ");
    scanf("%s",nom);
    printf(" Votre nom est = %s",nom);
    return 0;
}


l'affichage s'arrête juste aprés l'espace. le prenom ne s'affiche pas.

merci d'avance pour votre aide.


A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu peux utiliser scanf comme ceci

#include "stdio.h"

int main()
{
	char nom[50];
	
	printf("Entrez votre nom et prenom : ");
	scanf("%[^\n]",nom);
	printf("Votre nom est : %s",nom);
	
	return 0;
}
7
Pouet_forever
 
Tu pourrais aussi lui indiquer comment vider le buffer d'entrée, là s'il fait plusieurs scanf de suite il risque fort d'être surpris !
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
C'est vrai il faudrait rajouter un getchar() après le scanf pour retirer le \n final.
Mais quitte à pointer l'erreur, ta contribution aurait été bien plus intéressante, si tu l'avais toi même résolu plutôt que d'attendre que je le fasse...
1
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   23
 
merci pour votre solution et ça marche.
mais pas une solution qui utiliserait les pointeurs du genre char*?
je voudrai faire de l'allocation dynamique.

vos solutions seront les bienvenues
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu peux reprendre ton code d'allocation dynamique d'avant, ça ne change rien.
Il n'y a que le scanf qui est différent.
0