équivalent scanf en c++ [Fermé]

Signaler
-
Messages postés
499
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
-
Bonjour,
Y-a-t-il un équivalent c++ de la fonction scanf ?
Le but est de récupérer des nombres dans un string formaté, pour l'instant j'utilise :
scanf(txt.c_str(), "truc %ld bidule %ld machin", &m, &n);

mais ça fait pas vraiment gueule c++, en plus ça marche pas à tout les coups...

5 réponses

Messages postés
499
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
123
Personnellement je préfère scanf mais bon...

#include <conio.h>

#include <iostream>
#include <fstream>
#include <string>

#include <sstream>

int main( int argc, char *argv[])
{
	std::string		dummy;
	long double		ldValue1;
	long double		ldValue2;
	std::stringstream	ss;

	std::ifstream		file( "test.txt" );

	if ( file.is_open() )
	{
		ss << file.rdbuf();	// <- /!\ ici ça bourrine /!\

		while ( ss >> dummy >> ldValue1 >> dummy >> ldValue2 >> dummy )
			std::cout	<< "Value1 = " << ldValue1 << "\t"
				 	<< "Value2 = " << ldValue2 << std::endl;

		file.close();
	}

	getch();

	return 0;
}


Ce serait plus propre de le faire avec des ::std::getline à moins que le fichier ne soit pas trop gros.

M.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63631 internautes nous ont dit merci ce mois-ci

Scanf étant une fonction native du C, elle se retrouve en C++

/* scanf example */
#include <stdio.h>

int main ()
{
char str [80];
int i;

printf ("Entrez votre nom de famille: ");
scanf ("%s",str);
printf ("Entrez votre nom: ");
scanf ("%d",&i);
printf ("Mr. %s , %d ans.\n",str,i);
printf ("Entrez un nombre en héxa: ");
scanf ("%x",&i);
printf ("Vous avez entré %#x (%d).\n",i,i);

return 0;
}


A+
J'ai fait une faute :

printf ("Entrez votre age: "); à la place de printf ("Entrez votre nom: ");
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481
En C++ on utilise plutôt le flux "cin".
https://openclassrooms.com/fr/courses#ss_part_4
>
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Heuuuu... ouép !!
Un pitit exemple serait trop te demander ??

S'il te plait... ais pitié de moi...

^^
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Jure moi l'allégeance, et je te file un exemple.
>
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Tous ça pour un petit exemple ??

Bon allez... je le jure !!!

^^
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

J'accepte!

Prenons un fichier nommé test.cpp
On va y mettre ce code (je mets des commentaires pour expliquer):
#include <fstream> //En-têtes pour la classe ifstream
#include <iostream> //En têtes pour utiliser cout

/*Permet de ne pas s'embarasser avec les préfixes de nom (exemple std::cout devient cout) */
using namespace std; 

int main()
{
	string s; //la chaine
	ifstream ifs("test.cpp"); //On ouvre le fichier source (le fichier dans lequel on est)
	ifs >> s; //On met la première ligne du fichier dans la chaine s
	cout << s; //On affiche la chaine
	return 0;
}
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Toutes les références pour la classe ifstream sont là:
http://www.cplusplus.com/reference/fstream/ifstream/
Messages postés
499
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
123
Salutations,

On va faire bref et violent:

binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)


M.
heu...
moi j'ai un truc du genre :
#include <iostream>
using namespace std;

int main()
{
	/*tout plein de code*/

	string txt = "truc 12 bidule 321 machin";
...

mon but c'est de récupérer 12 et 321, pour l'instant j'utilise :
	double m;
	double n;
	scanf(txt.c_str(), "truc %ld bidule %ld machin", &m, &n);

En fait j'espérais qu'une fonction existait pour manipuler directement le string (et sans merder, parce que scanf à des défauts qui sont un peu chiant dans le programme).

Soyons fou, je voudrais un truc du genre (enfin... à peut près hein !! là j'invente pour dire d'illustrer !! ^^) :
txt.nom_de-la_fonction("truc ", &m, " bidule ", &n, "machin");

heu... oué, j'suis pas sûr de moi là, on va en faire un autre (juste pour le fun !! ^^) :
txt >> "truc " >> m >> " didule " >> n >> " machin"; //ça serait vraiment simple là, mais on peut toujours rêver...
j'ai beau me relire, je trouve la roue que je viens de réinventer de plus en plus bancale...

^^
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481 > -
Ben non par contre c'est plus compliqué. Si tu veux utiliser les formatages, là je vois pas.
>
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Bon tant pis...

Merci quand m^me !!
J'aurais quand même bien ri !! (l'allégeance je m'y attendais pas...)
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 481 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

Non mais oh! J'ai pas dit que c'était fini!

Non j'ai oublié de dire qu'en fait les fonctions de type scanf sont connues pour être dangeureuses. J'ai envie de dire que ce sont des fonctions qui servent à apprendre le C.
Si tu es sûr que ton fichier est organisé de telle ou telle manière, il vaut peut être mieux y aller avec des fonctions comme >> ou read()...