Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1417 connectés 

  FORUM HardWare.fr
  Programmation

  [C] Aide sur scanf

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Aide sur scanf

n°83855
Olivier51
Posté le 22-12-2001 à 16:53:45  profilanswer
 

Comment fait-on pour stocker une entrée avec des espaces dans une chaîne.
 
Exemple
Je tape : "Bonjour tout le monde"
scanf(...,txt);
Et je voudrais retrouvé : "Bonjour tout le monde" dans txt et pas seulement "Bonjour".

mood
Publicité
Posté le 22-12-2001 à 16:53:45  profilanswer
 

n°83857
Alload
Posté le 22-12-2001 à 16:57:54  profilanswer
 

Peux-tu utiliser les string (C++)?

n°83858
Olivier51
Posté le 22-12-2001 à 17:00:15  profilanswer
 

non seulement en C et sans créer sa fonction ...

n°83859
corvincent
Posté le 22-12-2001 à 17:12:00  profilanswer
 

ben scanf("%s",txt);
 
 
char txt[22+1]  // +1 car \0 de fin de chaine et 22 pour le reste

n°83860
Olivier51
Posté le 22-12-2001 à 17:15:19  profilanswer
 

Ben justement non scanf("%s",txt) ne marche pas il ne renvoie seulement que "Bonjour"

n°83861
corvincent
Posté le 22-12-2001 à 17:18:50  profilanswer
 

#include <stdio.h>
 
main()
{
char text[21];
 
printf("texte:" );
gets(text);
 
printf("%s",text);
}
 
voila ça sa tourne

n°83959
Eniac
Da Mourfis' King
Posté le 23-12-2001 à 15:05:26  profilanswer
 

il est débutant, il ne doit pas connaître les "gets"
(remarque, je suis dans le même cas)
 
tu oublies le "&"
 
scanf("%c", &texte);


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°83961
qxn
Posté le 23-12-2001 à 15:12:37  profilanswer
 

oui effectivement le gets prends toute la ligne espace compris le scanf s'arrete a l'espace sinon une autre solution etait un while avec un getchar mais ta pas le droit de creer e fonction ;(

n°83963
Eniac
Da Mourfis' King
Posté le 23-12-2001 à 15:22:09  profilanswer
 

question à 5 balles :
dans un programme, on demande à l'utilisateur d'entrer un certain chiffre.  La commande qui suit est scanf("%d",[nom]);
Si on met une lettre à la place d'un chiffre, le programme bugge(plein de chiffres défilent à l'écran).
 
Y'a moyen d'éviter ça ?


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°83980
sisicaivra​i
Life is Beautifullll
Posté le 23-12-2001 à 16:42:08  profilanswer
 

Eniac a écrit a écrit :

question à 5 balles :
dans un programme, on demande à l'utilisateur d'entrer un certain chiffre.  La commande qui suit est scanf("%d",[nom]);
Si on met une lettre à la place d'un chiffre, le programme bugge(plein de chiffres défilent à l'écran).
 
Y'a moyen d'éviter ça ?  




ce que je faisais :
ne prendre que des char , quitte a eventuellement les convertir en chiffre après

mood
Publicité
Posté le 23-12-2001 à 16:42:08  profilanswer
 

n°84039
Fork
Posté le 24-12-2001 à 09:30:30  profilanswer
 

Pour scanner une ligne qui contient des espaces, scanf convient parfaitement : mais il faut connaitre l'astuce qui tue !
La ligne que tu as tapée au clavier est stockée dans un tampon. scanf va te renvoyer tous les caractères jusqu'au premier caractère séparateur... mais le reste du texte est toujours dans le tampon, il suffit de refaire d'autres scanf derrière pour le récupérer :
 
char temp[80];
 
do
{
   scanf("%s",temp);
}while(temp[0]!='\0';); // je suis pas sûr de la condition de sortie !
 
... et chaque exécution de la boucle te donne le mot suivant dans le tampon.

n°84072
godbout
Génial.
Posté le 24-12-2001 à 14:12:57  profilanswer
 

fgets(buf, "%s", 255) si je me gourre pas.
Et pour les char * y a pas besoin d'un & puisque le nom du char * est deja un pointeur vers le 1er element du tableau


---------------
Super.
n°84135
HelloWorld
Salut tout le monde!
Posté le 25-12-2001 à 01:53:53  profilanswer
 

petit rappel :
http://www.lri.fr/~aze/page_c/aide_c/scanf.html
 
si ta chaine est saisie dans la console, elle se termine par "\n"
donc toi tu veux lire tous les caractères autres que "\n"
donc :

Code :
  1. scanf("%[^\n]", chaine);


et sans le & comme quelqu'un a dit (chaine est un pointeur)
 
pour lire que des chiffres, je pense que c'est un peu plus complexe
moi je ferais :
filtrer tous les chiffres dans un buffer

Code :
  1. scanf("%[0-9]", buffer);


convertir ce buffer en nombre

Code :
  1. sscanf(buffer, "%d", &nombre);


ca c'est vite fait
si le mec rentre des lettres, scanf va s'arreter et la prochaine lecture ce sera des lettres
on peut donc rajouter un

Code :
  1. fflush(stdin);

apres notre scanf.
 
Cela dit, je pense que ca tient surtout de la manière dont scanf est implémenté. Perso,

Code :
  1. scanf("%d", &n);

(Borland) testé en entrant "123abc"  me renvoit "123" sans planter ...
mais un

Code :
  1. fflush(stdin);

est nécessaire ("abc" reste)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°84147
Eniac
Da Mourfis' King
Posté le 25-12-2001 à 12:09:10  profilanswer
 

J'y comprend rien :)
 
Je (on ?) suis débutant en C, j'ai pas encore vu ce qu'étaient les chaînes, les pointeurs, comment fonctionnent les buffers,etc...
 
Tout ce qu'on m'a dit (et j'ai un bouquin qui le confirme) c'est de toujours mettre un & devant le nom de la variable, je sais même pas à quoi ça sert, je pensais bêtement que c'était la syntaxe (si au passage tu pouvais m'expliquer je dirais pas non :) )
 
A+


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°84236
HelloWorld
Salut tout le monde!
Posté le 25-12-2001 à 19:48:04  profilanswer
 

un pointeur, c'est comme une adresse internet : c'est un lien
un pointeur, c'est pas une adresse de site mais une adresse mémoire.
un lien, ca peut être un lien vers une image, un site, du texte, un exe, un forum ...
un pointeur c'est pareil : ca peut pointer sur tout, mais ca reste une simple adresse mémoire = un nombre
un pointeur sur un entier et un pointeur sur une chaine de caractere sont tous les deux des nombres = des adresses de 32 bits ici
 
pour obtenir l'adresse d'une variable, il faut utiliser l'opérateur &
 
fait

Code :
  1. printf("%X", &nombre);


et tu verra s'afficher (en hexadecimal) l'adresse de ta variable
c.a.d l'endroit ou elle se trouve dans ta RAM (en gros)
 
scanf a besoin des adresses des variables qui doivent recevoir les valeurs lues

Code :
  1. scanf("%d", &nombre);


 
tu dois passer l'adresse de la variable nombre qui va recevoir le nombre lu
donc tu fais &nombre.
 
Le cas des chaines de caracteres et plus généralement des tableaux (une chaine de char est un tableau de char) est particulier :
un tableau est lui meme un pointeur : il pointe sur le premier élément du tableau

Code :
  1. char Chaine[10];
  2.     printf("%X %X", Chaine, &Chaine[0]); /* meme resultat */


 
Chaine ou &Chaine[0], c'est pareil
donc, dans scanf, soit tu mets

Code :
  1. scanf("%s", texte);


car texte est un pointeur sur le debut de la chaine
soit tu mets

Code :
  1. scanf("%s", &texte[0]);


= l'adresse du premier élément de la chaine
 
Les pointeurs, c'est assez ardu ...
Garde bien en tête cette image d'URL
un pointeur c'est une adresse.
cette adresse peut désigned un gros objet tel qu'un tableau (un site entier) ou un tout petit nombre (une petite image ;))
mais aussi, un pointeur peut être invalide !
il faut s'assurer que l'objet pointé existe ... :sweat:
Bonne année !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°84271
Eniac
Da Mourfis' King
Posté le 25-12-2001 à 20:48:31  profilanswer
 

Grand merci pour tes explications, j'y vois plus clair maintenant.
 
En fait ça m'a tracassé un peu et je suis retourné voir dans mon bouquin, ils disent que dans un premier temps, SCANF ne sert qu'à lire qu'un seul caractère, le premier que l'on écrit.
 
Il parlent qu'il existe plusieurs moyens de contourner cette règle, mais qu'il est préférable d'utiliser le GETS.
 
Mais pour le moment je préfère pas trop m'embrouiller avec ces nouveaux trucs, je préfère bien assimiler tout ce que j'ai vu jusqu'à maintenant...surtout que je suis en plein blocus et que j'ai autre chose à faire :)
 
Bye et à toi aussi joyeux noel & bonne année !!!


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°84344
LeGreg
Posté le 26-12-2001 à 11:15:07  profilanswer
 

==> le langage C, de Kernighan et Ritchie
 
J'me repete, je sais..
 
LEGREG


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] Aide sur scanf

 

Sujets relatifs
Besoin d'aide sous Delphi 6[javascript] Aide sur anchor[i]
[java (ou C++) + mysql] hypra débutant, demande aide :(Aide pour les Masque sous Flash !!!!
Recherche aide pour forums PHP-BBBesoin d'aide pour une macro dans word 97 : accés fichiers :(
Urgent besoin d'aide sur Oracle8i[C] liste chainées de l'aide pitier lol
Besoin de l'aide d'un programmeur !!!!Aide pour un projet tutoré ?
Plus de sujets relatifs à : [C] Aide sur scanf


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR