Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > Comment utiliser scanf en C++ > Lecture du sujet

Comment utiliser scanf en C++

peut on l'utiliser ?

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne beegees # Posté le 12/05/2008 à 16:12:08
Groupe : Membres
Bonjour,

J'aimerais qu'un visiteur entre une donnée et que cette donnée soit enregistrée dans une variable.

Avec C j'ai utilisé scanf.

Peut-on encore l'utiliser avec C++

Si oui, sauriez-vous me donner un exemple d'utilisation :

scanf(const char*,...) ça, ça doit être le prototype.

J'ai fais ceci :
Code : C++
1
2
3
printf("\nVeuillez svp indiquer le nom d'un produit que vous voulez acheter");

	const char* ProduitVoulu = scanf("%s",&ProduitVoulu);


mais j'obtiens ce message d'erreur :

Citation : VC++6
'initializing' : cannot convert from 'int' to 'const char *'


Merci d'avance.

beegees
Édité le 12/05/2008 à 16:17:26 par beegees
Hors ligne NoHaR # Posté le 12/05/2008 à 16:23:11
Wakarimashita yo
Avatar
Groupe : Membres
Code : C++
1
2
3
4
5
6
7
8
char* ProduitVoulu = new char[50];
printf("\nVeuillez svp indiquer le nom d'un produit que vous voulez acheter");
scanf("%s",&ProduitVoulu);

//Le plus simple en C++ étant quand même :

cin >> ProduitVoulu;
//Avec <iostream> en include ;)


Edit : correction d'une erreur de 2 grosses bourdes plus grosses que moi dans un code qui ne fait pourtant que 4 lignes.
... Si ça continue comme ça j'vais m'pendre...
Édité le 12/05/2008 à 18:26:15 par NoHaR

La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne beegees # Posté le 12/05/2008 à 16:38:54
Groupe : Membres
Citation : NoHaR
Code : C++
1
2
3
4
5
6
7
8
char* ProduitVoulu;
printf("\nVeuillez svp indiquer le nom d'un produit que vous voulez acheter");
scanf("%s",&ProduitVoulu);

//Le plus simple en C++ étant quand même :

ProduitVoulu << cin;
//Avec <iostream> en include ;)


Salut,

Merci beaucoup pour ta réponse.
ça fonctionne.

Encore merci.

beegees

Hors ligne iNaKoll # Posté le 12/05/2008 à 16:57:37
Grosso Merdo..
Avatar
Groupe : Membres
Bonjour,

beegees >
scanf fonctionne de la même manière en C et en C++. scanf fait partie de la bibliothèque standard du C qui est aussi inclue dans la bibliothèque standard du C++. Pour accèder à scanf, il faut en C++ normalement inclure cstdio :
Code : C++
1
#include <cstdio>


NoHaR >
j'ai comme l'impression que tu as besoin de réviser les entrées/sorties en C++ autant que beegees à besoin de les réviser en C. ^^

ce n'est pas :
Code : C++
1
ProduitVoulu << cin;

mais :
Code : C++
1
cin >> ProduitVoulu;


La constante de couplage est fonction d'une certaine valeur constante que prend le champ scalaire des dilatations dans le vide quantique.
 
Hors ligne beegees # Posté le 12/05/2008 à 16:59:32
Groupe : Membres
Merci beaucoup iNaKoll,

s'est bien gentil.

Bon Lundi.

beegees
Hors ligne NoHaR # Posté le 12/05/2008 à 17:05:34
Wakarimashita yo
Avatar
Groupe : Membres
LOL ! Oui en effet !
Désolé :D.




La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne lmghs # Posté le 12/05/2008 à 17:29:38
Groupe : Membres
Personne n'est choqué par les lectures dans des zones non réservées ? Lectures qui déborderaient en plus ...
Il serait temps d'oublier les char*.
 
Hors ligne beegees # Posté le 12/05/2008 à 17:32:19
Groupe : Membres
je vais l'oublier, laisse moi 3 semaines.

Merci pour la remarque
Hors ligne iNaKoll # Posté le 12/05/2008 à 17:41:53
Grosso Merdo..
Avatar
Groupe : Membres
Citation : lmghs
Personne n'est choqué par les lectures dans des zones non réservées ? Lectures qui déborderaient en plus ...
Il serait temps d'oublier les char*.


Effectivement ! Maintenant que tu le dis, c'est sur que ça fait froid dans le dos mais pour ma défense je dirais que le choc des deux premiers messages à été trop violent pour que je ne remarque ce "détail". :-°

beegees > n'essaye pas d'aller plus vite que la musique, tu as du louper un ou deux chapitre du cours de C++ de Mateo... La lecture des chapitres 2 et 5 de la première partie te ferait à mon avis le plus grand bien !
Édité le 12/05/2008 à 17:44:05 par iNaKoll

La constante de couplage est fonction d'une certaine valeur constante que prend le champ scalaire des dilatations dans le vide quantique.
 
Hors ligne NoHaR # Posté le 12/05/2008 à 18:23:53
Wakarimashita yo
Avatar
Groupe : Membres
Mea culpa, j'ai simplement pris son code pour le transformer tel quel sans réfléchir, et en écrivant une connerie de surcroit, et j'ai tapé mon truc beaucoup trop vite, sans utiliser de strings ou de choses du genre.

C'est anti-pédago, je sais.

Tant pis, maintenant que la honte est abattue sur moi pour 3 générations suite à ce code, une de plus ou une de moins... 'pouvez m'achever -_-

(le pire, c'est que j'utilise C++ tous les jours au taf !!)

Moralité : qui qu'on soit, on n'est jamais à l'abris d'un gros moment d'absence.

La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne beegees # Posté le 12/05/2008 à 18:28:24
Groupe : Membres
Citation : NoHaR
Mea culpa, j'ai simplement pris son code pour le transformer tel quel sans réfléchir, et en écrivant une connerie de surcroit, et j'ai tapé mon truc beaucoup trop vite, sans utiliser de strings ou de choses du genre.

C'est anti-pédago, je sais.

Tant pis, maintenant que la honte est abattue sur moi pour 3 générations suite à ce code, une de plus ou une de moins... 'pouvez m'achever -_-

(le pire, c'est que j'utilise C++ tous les jours au taf !!)

Moralité : qui qu'on soit, on n'est jamais à l'abris d'un gros moment d'absence.


T'as voulu aider quelqu'un et t'as fait une erreur d'inatention.

Je trouve que le jugement est un peu dur !

Je ne me cherche pas d'excuse mais si je programme comme ça s'est parce que notre prof nous apprend comme ça, s'est eux qui devrait faire un peu plus attention.

ça ne sert à rien de vous acharner sur nous, pour ma part, ça fais trois jours que je suis occupé sur ce C++, trois jours que je n'ai pas mis le nez dehors, vous avez vu le soleil, pouf

Hors ligne NoHaR # Posté le 12/05/2008 à 18:34:27
Wakarimashita yo
Avatar
Groupe : Membres
Bah, parti d'un bon sentiment ou pas :

déclarer un char* sans l'allouer, ainsi que la bourde d'après avec cin... ça tient de l'erreur qu'on fait quand on débute et qu'on n'a jamais encore vraiment fait de C++.

Qu'un débutant la fasse et qu'on le renvoie vers le cours, passe encore je veux dire.
Mais avec un bac+5 en informatique, faut avouer que ça laisse très sérieusement à douter de mes compétences.

Donc oui, effectivement, ils ont un jugement très dur (en ce qui me concerne) et ils ont bien raison ;) .



La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne beegees # Posté le 12/05/2008 à 18:58:50
Groupe : Membres
quoi qu'il en soit, quoi que nous ayons fait, un forum n'est pas là pour juger les gens mais pour les aider, si ils n'ont pas envie d'aider, ils ne sont pas obliger, mais je n'accepte pas les critiques gratuites et faciles ! OUI le char* du C++ doit disparaitre, qu'il disparaisse déjà dans les cours (écoles et autres) après on verra
Hors ligne lmghs # Posté le 12/05/2008 à 19:23:20
Groupe : Membres
???
Qui juge ? Le code est voué à planter à l'exécution, c'est un fait.

De plus, les lectures sans précautions sont à éviter, en C scanf est déconseillé (cf le forum le forum d'à côté), en C++ pour la même raison on ne lit pas des char* (ou char[]) avec >> -- même en C++ pré-98. Ce ne sont que des faits qui ont été rappelés.

Quant à "être choqué", c'est une correction (comme correction d'exercice): la réaction saine que tout le monde devrait avoir en voyant des pointeurs ainsi utilisés.
 
Hors ligne iNaKoll # Posté le 12/05/2008 à 19:51:07
Grosso Merdo..
Avatar
Groupe : Membres
Citation : NoHaR
Bah, parti d'un bon sentiment ou pas :

déclarer un char* sans l'allouer, ainsi que la bourde d'après avec cin... ça tient de l'erreur qu'on fait quand on débute et qu'on n'a jamais encore vraiment fait de C++.

Qu'un débutant la fasse et qu'on le renvoie vers le cours, passe encore je veux dire.
Mais avec un bac+5 en informatique, faut avouer que ça laisse très sérieusement à douter de mes compétences.

Donc oui, effectivement, ils ont un jugement très dur (en ce qui me concerne) et ils ont bien raison ;) .

Euh... pour ma part, je ne me permet pas de juger qui que ce soit. Des erreurs, on en fait tous ! J'ai déjà fait bien pire que ça mais je ne vous raconterais pas ! ^^
Citation : beegees
quoi qu'il en soit, quoi que nous ayons fait, un forum n'est pas là pour juger les gens mais pour les aider, si ils n'ont pas envie d'aider, ils ne sont pas obliger, mais je n'accepte pas les critiques gratuites et faciles ! OUI le char* du C++ doit disparaitre, qu'il disparaisse déjà dans les cours (écoles et autres) après on verra

Aider, on ne fait que ça ! Mais malheureusement, les petites moqueries pas méchantes du tout peuvent être mal interprétées, je m'en rend compte... :(
Quand lmghs dit "qu'il serait temps d'oublier les char* ", il sous-entend à mon avis que la manipulation des chaines de caractères "façon C" sont sources de nombreuses erreurs. Pour les utilisations les plus courantes, il vaut mieux utiliser la classe string de la librairie standard du C++.. Ça évite d'avoir à se poser trop de questions avec l'allocation mémoire !
Si on apprend dans les cours d'info à utiliser les char* dans un premier temps, c'est souvent parce que l'on commence (à tord?) par apprendre les bases du C. Malgré la difficulté, la manipulation des char* permet d'appréhender la relation pointeur/tableau.. Donc à mon avis les char* sont pas près de disparaitre des cours !

La constante de couplage est fonction d'une certaine valeur constante que prend le champ scalaire des dilatations dans le vide quantique.
 
Hors ligne beegees # Posté le 12/05/2008 à 19:53:27
Groupe : Membres
ok j'ai réagi un peu vite, je m'excuse, je dois l'avouer, votre aide m'est (pour ne parler que de moi) INDISPENSABLE et PRECIEUSE et je ne vous en remercierai jamais assez.
Hors ligne NoHaR # Posté le 12/05/2008 à 20:04:30
Wakarimashita yo
Avatar
Groupe : Membres
Pour en revenir aux char*, je pense au cas particulier des bibliothèques du C que l'on utilise indifféremment pour des codes en C ou C++ (notamment celle sans laquelle je n'aurais jamais lâché mon petit Java pour coder en C++ : OpenCV).

Dans ce cas précis, il est vrai que les chaînes de caractères qu'il faut passer en paramètre de certaines fonctions demeurent (et c'est bien normal) des (const) char*, d'où le fait qu'on ne puisse pas complètement se passer des char* :D .

Bien qu'en C++ on puisse en fait utiliser la méthode string::cstr() (si je ne m'abuse), ce qui nous permet de sécuriser un peu plus le code en utilisant des strings et d'utiliser tout de même ces fonctions précises.

Édité le 12/05/2008 à 20:06:09 par NoHaR

La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne lmghs # Posté le 12/05/2008 à 20:16:23
Groupe : Membres
Ou même vector<char>... qui résistera mieux aux exceptions qu'un char*.
 
Hors ligne tc # Posté le 13/05/2008 à 14:58:30
Readability counts
Avatar
Groupe : Membres
Citation : NoHaR
Code : C++
1
2
3
4
5
6
7
8
char* ProduitVoulu = new char[50];
printf("\nVeuillez svp indiquer le nom d'un produit que vous voulez acheter");
scanf("%s",&ProduitVoulu);

//Le plus simple en C++ étant quand même :

cin >> ProduitVoulu;
//Avec <iostream> en include ;)


Edit : correction d'une erreur de 2 grosses bourdes plus grosses que moi dans un code qui ne fait pourtant que 4 lignes.
... Si ça continue comme ça j'vais m'pendre...


Il reste des erreurs (pas de & devant ProduitVoulu dans scanf(). Par ailleurs, il est fortement recommandé de controler le nombre de caracteres saisis et de purge le buffer clavier après usage. Le code devient:

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <limits>
#include <new>

using namespace std;

/* -tc- Elimine es caracteres non lus par scanf() */
void purge()
{
    std::cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
}

int main()
{
    int ret = 0;
    char* ProduitVoulu = NULL;

    try
    {
        ProduitVoulu = new char[50];
        printf("Veuillez svp indiquer le nom d'un produit que vous voulez acheter : ");
        fflush(stdout);
        scanf("%49s", ProduitVoulu);
        purge();
    }
    catch (bad_alloc)
    {
        fprintf(stderr, "Erreur: allocation de memoire impossible!");
        ret = EXIT_FAILURE;
    }

    cout << ProduitVoulu << endl;

    return ret;
}


C'est certain qu'utiliser scanf() n'est pas réellement choisir la solution de facilité. Son usage est déjà déconseillé en C, alors en C++... Préférer:

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <limits>

using namespace std;

/* -tc- Elimine es caracteres non lus sur le buffer clavier */
void purge()
{
    std::cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
}

int main()
{
    string ProduitVoulu;

    cout << "Veuillez svp indiquer le nom d'un produit que vous voulez acheter : ";
    cin >> ProduitVoulu;
    purge();
    cout << ProduitVoulu << endl;

    return 0;
}


Thierry

"We read Knuth so you don't have to." - Tim Peters (in Python Cookbook)

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 
Hors ligne lmghs # Posté le 13/05/2008 à 15:01:55
Groupe : Membres
Attention au mélange IO C et IO C++.
PS: toujours attraper les objets exception par référence (constante si possible)
Édité le 13/05/2008 à 15:02:29 par lmghs
 
Hors ligne NoHaR # Posté le 13/05/2008 à 15:26:16
Wakarimashita yo
Avatar
Groupe : Membres
Bon, avec mon ton le plus solennel :

La prochaine fois que j'essaye de poster un code sur un forum, je jure que j'essayerai de le compiler avant ! :D

Ces petites absences qui apportent de gros moments de solitude...
...

Si les compilateurs pouvaient parler, on se marrerait pas tous les jours !!

La facilité : c'est ne pas essayer de ne pas vivre en contradiction avec les idées que l'on ne défend pas...

Mon Tutoriel : Vision par Ordinateur
Avancement : Plusieurs chapitres en préparation pour la rentrée :p .
 
Hors ligne tc # Posté le 13/05/2008 à 16:12:12
Readability counts
Avatar
Groupe : Membres
Citation : lmghs
Attention au mélange IO C et IO C++.
PS: toujours attraper les objets exception par référence (constante si possible)


Oui, c'est un non sens de mélanger les API. Mais le PO semble vouloir absolument utiliser scanf().

Thierry

"We read Knuth so you don't have to." - Tim Peters (in Python Cookbook)

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 
Hors ligne MatteX # Posté le 13/05/2008 à 16:18:12
The cake is a lie!
Avatar
Groupe : Membres
Citation : NoHaR
Si les compilateurs pouvaient parler, on se marrerait pas tous les jours !!


Il y a des compilateurs qui parlent! lmghs, par exemple, en est un. ;)

Avec l'expérience, on devient mieux qu'un compilateur sur deux pattes. Un chance, sinon, nous n'aurions plus besoin de développeurs.

liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb
Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray!
 
Hors ligne lmghs # Posté le 13/05/2008 à 17:07:13
Groupe : Membres
Hum. "Interpréteur" à la limite, cela laisse de la place aux travers. ^^'
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 570 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.2824s (0.2551s)