cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006
-
8 déc. 2006 à 15:06
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006
-
8 déc. 2006 à 20:42
bojours,
voila je programme une petite calculette en ce moment pour mes etudes et je coince sur un petit probleme: comment verifier que ce qui a ete donné en entrée c'est bien des entiers????
exemple:
int a;
cout << "veillez entrer un ENTIER svp (priere de ne pas entrer de cochoneries a la place pasque ca va bugger, je vous previns je n'ai pas gerer ce type de problemes!!!!!!!!)"
cin >> a;
comment faire en sorte de (au moins) quitter le programme proprement si qqun (le prof...^^) s'ammuse a rentrer "blabla" a la place d'un entier???
le programme quitte avant que je puisse verifier ce qui a ete entré comme valeur.
j'imagine que ca doit se gerer par des exception deja definie dans windows (je sais definir mes propres exception mais la je ne vois pas trop) a savoir que j'ai deja une classe erreur ou plusieurs exceptions sont deja definie, si je pouvais juste en rajouter une...
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006 8 déc. 2006 à 20:42
pour le probleme de namespace je met la solution malgré tout si ca peut aider qqun: contrairement a dev c++ VS a besoin qu'on declare le using apres les Includes...
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 8 déc. 2006 à 16:05
Salut,
Voici un exemple simple :
#include <stdio.h>
#include <string.h>
int isinteger(char *n)
{
int i=0;
int a=0;
for(i = 0; n[i] != 0; i++)
{
if(isdigit(n[i]))
{
a += 1;
}
}
return a / strlen(n);
}
int main(int argc, char** argv)
{
char* n;
fflush(stdin);
printf("saisir un entier : ");
scanf("%s",&n);
while (!isinteger(&n)) {
fprintf(stderr, "ceci n'est pas un entier\n");
printf("saisir un entier : ");
scanf("%s",&n);
}
return(0);
}
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006 8 déc. 2006 à 16:34
bonjours et merci pour vos reponses,
maisj'ai du mal m'exprimer ce n'est pas les entiers mon principal soucis (meme pas du tour car dans l'absolu je veut des float c'etais juste pour simplifier la question mais bon tout le monde c'est concentré dessu^^) non mon soucis c'est lkes chaine de caractere type: "je rebtre une phrase a la place d'un numero rien que pour te faire chier" c'est ca mon probleme
donc si pour le moment je fait juste
float monNombre;
cin >> monNombre;
et il faudrai le remplacer par:
float monNombre = VerifierLeNombreEnEntreeEtLeRenvoyer();
float
VerifierLeNombreEnEntreeEtLeRenvoyer()
{
char *input; //j'aurai preferer travailler avec des strig mais bon
cin >> input; // je sais meme pas si ca marche
if(input.VerifierQuIlNyAPasDeConneries())//cette fonction verifie qu'il n'y a pas de conneries en entree
{
return atof(& input);
}
else{
lever une exception qui va envoyer balader l'utilasateur farceur();
//ca c bon je sais faire^^
}
}
donc le pb c'est surtout cette fonction dans l'absolue j'ai trouvé
strtod() une fonction qui ressemble a atof() mais qui en plus verifie que c'est bien un nombre qui a ete entrée mais en cas d'erreur elle revoi 0 donc les 0 sons considerée comme des erreur et ca pose probleme ca....
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 8 déc. 2006 à 16:41
Oui recommence tout à 0
Si tu nous dit entier, c'est normal qu'on fait pour des entiers...
Regarde ma solution elle est très bien pour ce que tu veux, vaut juste dire qu'il oublier les virgules ou les points
Enfin bref, et en effet
char *input; //j'aurai preferer travailler avec des strig mais bon
cin >> input; // je sais meme pas si ca marche
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006 8 déc. 2006 à 17:03
desolé je suis un peut rouiller en C++ je savais bien que ca ne marcherai pas trop c'etais juste pour donner une idee de ce que je voulais faire mais pour en revenir a ce qu'a dit vecchio56 (if(cin >> n)) l'operator >> renvoi 0 en cas d'echec de l'operation d'affectation...?? je n'arrive pas a trouver ca sur le man, mais si qqun a des infos ca serai avec plaisir
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 déc. 2006 à 17:07
Ca marche je peux te l'assurer
En fait, ca revient à écrire cela:
int n;
cin >> n;
if(!cin.fail()) cout << "C'est un entier: " << n << endl;
else cout << "Ce n'est pas un entier" << endl;
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006 8 déc. 2006 à 18:21
ehh petite question qui n'a rien a voir avec le reste: je travaillais sur dev c++ mais mon prog doit pouvoir compiler sous VS2005 le probleme c'est que cette µ$%§¤ n'a pas l'aire de reconnaitre les using name space std;!!!!!! et ca me sort une erreure
error C2871: 'std' : a namespace with this name does not exist
Oo qqun a une idée?
cs_filsdugrand
Messages postés9Date d'inscriptionmardi 13 décembre 2005StatutMembreDernière intervention 8 décembre 2006 8 déc. 2006 à 20:40
rahhhh!! j'en peut plus bah finalement ca marche pas tout a fait.des fois ca me fait une erreure de segmentation pour je ne sais quel raison au niveau de:
if(!(cin >> com.m_Reel))
vecchio56 si tu pouvais regarder dans le programme que je t'ai envoyer ca marche parfaitement pour des matrices de taille inferieur a 2*2 mais des qu'on passe aux matrice 3*3 et qu'on rentre une phrase au premier element ca fait une seg fault....