équivalent scanf en c++

- -  
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   -
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...
A voir également:

5 réponses

Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
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
Le D
 
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+
0
Le D
 
J'ai fait une faute :

printf ("Entrez votre age: "); à la place de printf ("Entrez votre nom: ");
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
En C++ on utilise plutôt le flux "cin".
https://openclassrooms.com/fr/courses#ss_part_4
0
-
 
Oui sauf que "cin" sert à récupérer des données depuis le clavier, or j'ai une chaine déjà toute faite et je veux récupérer des nombres dans cette chaine.
Et scanf ça marche très bien sauf que ça marche pas !! (^^)... En fait ça marche, mais mal, ça bug parfois...
Et puis j'utilise un string, pas une chaine de caractère, donc c'est pas tout à fait adapté.
J'osais penser que la magie de la POO aurait fait une fonction toute faite qui marche pour faire ça...
0
- > -
 
Aaahhhhhhh !!!!!!!!
Je viens de trouver ma connerie : c'est l'équivalent de "fscanf" que je veux, pas scanf...
Scusez...
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > -
 
C'est la même chose avec un fichier. C'est juste qu'il te faut un objet de type ifstream.
0
- > -
 
À ben non !!! Décidemment je l'aime pas cette fonction... C'est bien scanf...
Re-scusez...

^^
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > -
 
Tu l'aimes pas parce que tu l'as pas encore essayée ;-)
0
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
-
 
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...
0
-
 
j'ai beau me relire, je trouve la roue que je viens de réinventer de plus en plus bancale...

^^
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > -
 
Ben non par contre c'est plus compliqué. Si tu veux utiliser les formatages, là je vois pas.
0
- > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bon tant pis...

Merci quand m^me !!
J'aurais quand même bien ri !! (l'allégeance je m'y attendais pas...)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
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()...
0