Posez votre question Signaler

Équivalent scanf en c++

- - Dernière réponse le 31 mars 2008 à 20:52
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...
Lire la suite 

Équivalent scanf en c++ »

Suggestions
22 réponses
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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+
Le D - 30 mars 2008 à 23:33
J'ai fait une faute :

printf ("Entrez votre age: "); à la place de printf ("Entrez votre nom: ");
Ajouter un commentaire
Réponse
+0
moins plus
En C++ on utilise plutôt le flux "cin".
http://www.siteduzero.com/...
- - 31 mars 2008 à 18:51
Tous ça pour un petit exemple ??

Bon allez... je le jure !!!

^^
kiliankilian - 31 mars 2008 à 19:00
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;
}
kiliankilian - 31 mars 2008 à 19:04
Toutes les références pour la classe ifstream sont là:
http://www.cplusplus.com/reference/iostream/ifstream/
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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...
kilian- 31 mars 2008 à 19:28
Ben non par contre c'est plus compliqué. Si tu veux utiliser les formatages, là je vois pas.
- - 31 mars 2008 à 19:35
Bon tant pis...

Merci quand m^me !!
J'aurais quand même bien ri !! (l'allégeance je m'y attendais pas...)
kiliankilian - 31 mars 2008 à 19:41
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()...
Ajouter un commentaire
Ce document intitulé « équivalent scanf en c++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?