Scanf et chaine de caracteres avec espaces

Résolu/Fermé
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 10 nov. 2011 à 09:49
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 11 nov. 2011 à 12:00
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
10 nov. 2011 à 11:11
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
10 nov. 2011 à 22:14
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 nov. 2011 à 12:00
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 dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
10 nov. 2011 à 17:55
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
10 nov. 2011 à 18:09
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