IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tranformer un string en int (problème)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut tranformer un string en int (problème)
    Bonjour,
    Je suis en train d'apprendre à programmer en C mais malheureusement les cours sont en finnois et je ne comprends pas grand chose .
    je vais peut être me faire taper dessus mais je tente le coup . Le but de mon programme C est de lire une string écrite en command line argument et de la transformer en C. J'ai pensé utiliser la fonction scanf. L'appel du programme et la donnée des paramêtre se fait en même temps. Je ne sais pas si ce que je dis est compréhensible donc je vais mettre des exemples avec les résultats voulu en dessous:

    ./monProg
    ERROR

    ./monProg 1 abc
    ERROR

    ./monProg -25.3
    ERROR: valeur différente de 0123456789

    ./monProg 25.5
    ERROR: valeur différente de 0123456789

    ./monProg 5
    5

    Voici le code que j'ai écrit que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
    	int nbr=0;
    	int square=0;
            if (!(argc==2)){
    		printf("ERROR \n");
    		return 1;
    	}
    	else{
    		if(scanf("i%",&nbr)==1){
    		    square=nbr*nbr;
    			printf("\n", nbr);
    			printf("\n", square);
    			getchar();
    			return(0);
    		}
    		else{
    			printf("ERROR: valeur différente de 0123456789 \n");
    			return 1;
    		}
    	}
    }

    Le programme ne fonctionne pas. Je suppose que c'est à cause du test "if(scanf("i%",&nbr)==1)" car il y a la string monProg avant le nombre dans tous les cas. Il faudrait donc la passer pour faire tourner correctement le programme? Pouvez vous m'aider svp?

    Merci d'avance

    Jo

  2. #2
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    je pense qu'il faudrait tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(argv[1],"%d",&nbr)

  3. #3
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    petite remarque en passant
    est plus simple que

  4. #4
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    En fait, je crois que tu n'a pas bien compris le principe des formats pour les fonctions comme printf.

    Tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("\n", nbr);
    printf("\n", square);
    alors qu'il faut quand même préciser ce que tu veux afficher. Ici, ce sont des entiers, on met donc un "%d" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf("%d\n", nbr);
    printf("%d\n", square);

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    je viens de le retester, j'avais fait une petite erreur mais un problème subsiste, quand j'acris 2.5 par exemple, il me le tronque en 2 alors que je voudrais qu'il me le passe en erreur. Comment m'y prendre?

  6. #6
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    En fait, dans l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(argv[1],"%d",&nbr)
    il cherche a lire un entier. Quand la chaine est "2.2", il lit bien un entier (le premier 2) et s'arrête après car le point ne peut faire partie d'un entier, c'est pourquoi il te renvoie 2 et ne fait pas d'erreur. Il faut donc faire en sorte que non seulement il lise un entier mais aussi qu'il s'assure qu'il n'y a qu'un entier et pas d'autres caractères.

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Je viens d'essayer ce que tu viens de me dire mais quand je lui rentre un entier, il me dit tjr que ce n'est pas bon. Il arrive au test mais me dit que je n'ai pas entré une valeur 0123etc.
    Pense tu que le problème viens de l'indice donné à argv[1] bien que ça me semble être 1? Mon test n'est peut être pas correct?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/05/2009, 14h36
  2. Problème pour passer un String en int
    Par Bouboukick dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 29/05/2008, 17h07
  3. Servlet: problème de conversion d'un string en INT
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/11/2006, 10h44
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo