Probleme avec des unsigned long long

vidamatvidamat Membre
17:57 modifié dans API AppKit #1
salut,
j'explique rapidement mon probleme, j'essaie de faire une petite appli qui me permet de calculer le complemet à  97 d'une operation de modulo sur 13 chiffres:
voici le code:

#include <stdio.h>

int main (int argc, const char * argv[]) {

unsigned long long nombrelong=0;

int resultat=0;
printf("Entrez votre nombre");

scanf("%lu",&nombrelong);


resultat = 97 - (nombrelong % 97);

printf("la clé est:%d",resultat);
    return 0;
}


ca me donne des valeurs abberrantes: d'ailleurs si je prends un exemple:
Valeurs exacte : 1290278551031 / 97 =13301840732  reste 27 et 97 -27 = 70
Valeurs données par l'appli : 89 avec une valeur de "nombrelong" à  1788362231 sur 9 chiffres


QQUN à  une idée du problème ??

Merci

Réponses

  • BruBru Membre
    17:57 modifié #2
    le motif d'un unsigned lon long (dans le scanf) est %llu.

    .
  • vidamatvidamat Membre
    17:57 modifié #3
    et bien merci, ca fonctionne enfin. un petit oubli qui cause bien des tracas.
    Merci encore
  • vidamatvidamat Membre
    17:57 modifié #4
    Bon maintenant que ca fonctionne comme, ma prochaine etape est de creer une belle appli pour calculer cette clé: helas ca ne fonctionne pas plus . etant tres debutant en programmation, je vous remercie par avance de votre aide:
    le nib se presente sous la forme de 2 NSTextfield (1 pour l'acquisition du numero de sécu et l'autre pour le resultat) et d'un bouton pour l'action de calculerCle.

    voici le code :

    /* CalculerCle */

    #import <Cocoa/Cocoa.h>


    @interface CalculerCle : NSObject
    {
        IBOutlet id inText;
        IBOutlet id outText;
    unsigned long long numeroSecu;
    int cleSecu;
    }
    - (IBAction)calculerCle:(id)sender;

    @end


    et l'implementation ;

    #import "CalculerCle.h"

    @implementation CalculerCle

    - (IBAction)calculerCle:(id)sender
    {
    numeroSecu = [NSDecimalNumber decimalNumberWithString:[NSString localizedStringWithFormat:@%qu,inText]];

    cleSecu = 97 - (numeroSecu % 97);

    [outText setIntValue:cleSecu];

    }

    @end


    merci de m'eclairer .....

    p.S: j'ai aussi essayer le format @%llu et @%ull comme indique dans les docs.
  • BruBru Membre
    août 2004 modifié #5
    Ouh la la...

    Et tu n'as aucun message lors de la compilation ?
    Car tu as mélangé des pointeurs d'object cocoa avec des valeurs que tu penses être des lon long...

    Bon, je te donne un début de solution (à  mettre dans ta méthode calculerCle:) :
    <br />{<br />    long long numeroSecu;<br />    int cleSecu;<br /><br />    if ([[NSScanner scannerWithString:[inText stringValue]] scanLongLong:&amp;numSecu])<br />    {<br />        cleSecu = 97 - (numeroSecu % 97);<br />        [outText setIntValue:cleSecu];<br />    }<br />}<br />
    


    Explication : la classe NSScanner permet d'extraire un "motif" à  partir d'une chaà®ne NSString. Ici le "motif" demandé est un long long. Donc on créé un scanner temporaire sur la chaà®ne du premier champ texte (inText), puis on demande d'extraire et de retourner le long long qu'on met dans la variable numSecu par la méthode scanLongLong:. Cette méthode retourne YES si le NSScanner a pu extraire une valeur long long valide, sinon elle retourne NO.
    Le reste du code reprend le tien.

    .
  • vidamatvidamat Membre
    17:57 modifié #6
    HUmmm :)

    Merci beaucoup, j'ai beaucoup appris aujourd'hui.
    ca marche tres bien et je vais continuer à  améliorer 2 ou 3 petites choses.

    Merci encore

    a +
Connectez-vous ou Inscrivez-vous pour répondre.