2010-05-12 1 views
0

Ça fait un moment maintenant et j'essaie toujours de faire fonctionner un certain code. J'ai déjà posé des questions sur différentes commandes, mais maintenant j'espère que c'est la dernière (combinant toutes les questions en un seul code).Numérisation, vérification, conversion, copie de valeurs ... Comment? - C -

Je veux essentiellement à:

* Numérisez une entrée (doit être le caractère?)

* Vérifiez si son un numéro

* Dans le cas contraire, une erreur de retour

* Convertir que caractère dans un nombre flottant

* Copiez la valeur dans une autre variable (je l'ai appelée imp ici)

Voici ce que je suis venu avec:

CODE * ÉDITÉ

#include<stdio.h> 
#include<stdlib.h> 
#include<ctype.h> 
main(){ 
    int digits; 
    float imp=0; 
    char* alpha; 
    do{ 

    printf("Enter input\n\n"); 
    scanf("\n%c",alpha); 
    digits=isdigit(alpha); 
     if(digits==0){ 
     printf("error\n\n"); 
     } 
    imp=atof(alpha); 
    }while(digits==0); 

} 

Le problème est ce code ne fonctionne pas du tout ... Il me donne que atof doit être d'un const char et chaque fois que j'essaye de le changer, ça continue d'échouer. Je suis frustré et forcé de demander ici, parce que je crois que j'ai essayé beaucoup et je continue à échouer, mais je ne serai pas soulagé jusqu'à ce que je l'obtienne au travail xD Donc j'ai vraiment besoin de votre aide les gars.

Dites-moi pourquoi ce code ne marche pas, qu'est-ce que je fais de mal? J'apprends encore C et apprécie vraiment votre aide :)

EDIT erreur est donnée atm:

Argument no 1 of 'isdigit' must be of type 'const int', not '<ptr>char'

EDIT Ce code compile très bien, mais se bloque lorsqu'une entrée est saisie .

#include<stdio.h> 
    #include<stdlib.h> 
    #include<ctype.h> 
    main(){ 
    int digits; 
    float imp=0; 
    char* alpha=0; 
    do{ 

    printf("Enter input\n\n"); 
    scanf("\n%s",alpha); 
    digits=(isdigit(alpha[0])); 
    imp=atof(alpha); 
    }while(digits==0); 
} 
+0

Merci d'avoir fait paraître mieux sbi, je n'ai pas les outils d'édition ... Je ne sais pas pourquoi – NLed

Répondre

1

Pourquoi ne pas avoir scanf faire la conversion atof pour vous ?

#include <stdio.h> 
int main() 
{ 
    float imp=0; 
    while (1) 
    { 
     printf("Enter input\n\n"); 
     if (scanf("%f", &imp) < 1) break; 
    } 
    return 0; 
} 

Votre exemple le plus récent échoue parce alpha est un pointeur NULL. Déclarer comme char alpha[40]; pour allouer de l'espace pour cela. Vous voudrez probablement utiliser% 40s dans votre chaîne de format pour empêcher scanf de déborder alpha.

Aussi, utilisez strtod au lieu de atof et vous saurez si la conversion a réussi (mieux que votre méthode d'utilisation isdigit qui échouera sur un entier négatif).

+0

Ahhh merci beaucoup! Votre explication a fait fonctionner mon code !! J'ai dû enlever le tableau NULL comme vous l'avez mentionné, et empêcher le scanf de le déborder !!! Légende, merci :) :) – NLed

1

Vous devez probablement utiliser %s au lieu de %c et de le mettre dans le tableau char (char*). Vous obtenez également probablement une erreur que vous devez utiliser const char* et non const char.

Vous ne voulez pas lire un seul caractère - vous voulez lire une chaîne entière ...

EDIT:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
main(){ 
    int digits,i; 
    float imp=0; 
    char* alpha = malloc(100); /* 100 is for example */ 
    do{ 
    printf("Enter input\n\n"); 
    scanf("\n%s",&alpha); 
    for (i = 0; i != 100; ++i) 
    { 
     if (alpha[i] == '\0') 
     break; 
     if (!isdigit(alpha[i])) 
     { 
     printf("error\n\n"); 
     return ...; 
     } 
    } 
    imp=atof(alpha); 
    }while(true); 
} 
+0

Merci d'avoir répondu, je change% s en% c, j'ai eu moins d'erreurs. Maintenant j'ai une nouvelle erreur sur les chiffres 'Argument no 1 de 'isdigit' doit être de type 'const int', pas ' char'' – NLed

+0

J'ai ajouté un exemple pour quelque chose de plus proche de ce que vous voulez probablement. – brickner

+0

Merci beaucoup pour cette structure .. J'ai fait le mien pour compiler sans erreurs .. mais il se bloque une fois que j'ai entré quelque chose, pouvez-vous s'il vous plaît vérifier le code édité? (voir question) – NLed

Questions connexes