Bonsoir à tous,
Il y bien longtemps que je n'ai plus pratiqué le C... Mais voici que je profite de ces quelques jours de congé entre Noël et nouvel an pour me mettre à Objective-C sur mon macbook! Naturellement, ce n'est pas l'aspect objet du langage qui pose problème, mais bien la si terrible et pourtant si excitante partie C et sa gestion mémoire...
Si j'exécute le programme avec la ligne de commande suivante:
Je m'attends à recevoir le résultat suivant:
Mais j'obtiens:
Le problème semble se situer à la ligne 27 du programme main qui combine printf avec plusieurs %s.
D'avance merci de m'éclairer de vos lumières
Voici donc le code incriminé:
le header:
L'implémentation:
Le programme main
Il y bien longtemps que je n'ai plus pratiqué le C... Mais voici que je profite de ces quelques jours de congé entre Noël et nouvel an pour me mettre à Objective-C sur mon macbook! Naturellement, ce n'est pas l'aspect objet du langage qui pose problème, mais bien la si terrible et pourtant si excitante partie C et sa gestion mémoire...
Si j'exécute le programme avec la ligne de commande suivante:
Bloc de code:
./Fraction 3/4 1/3
Bloc de code:
3/4
1/3
The value of 3/4 + 1/3 is 1.08333
Bloc de code:
3/4
1/3
The value of 13/12 + 13/12 is 1.08333
D'avance merci de m'éclairer de vos lumières
Voici donc le code incriminé:
le header:
Bloc de code:
#import <objc/Object.h>
@interface Fraction: Object
{
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(void) setTo: (int) n over: (int) d;
-(int) numerator;
-(int) denominator;
-(double) toValue;
-(char*) toString: (char*) pString;
-(Fraction*) add: (Fraction*) f;
@end
L'implémentation:
Bloc de code:
#import "Fraction.h"
#import <stdio.h>
#import <string.h>
@implementation Fraction;
-(void) print
{
printf(" %i/%i ", numerator, denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
-(void) setTo: (int) n over: (int) d
{
numerator = n;
denominator = d;
}
-(int) numerator
{
return numerator;
}
-(int) denominator
{
return denominator;
}
-(double) toValue
{
if (denominator != 0)
return (double) numerator / denominator;
else
return 1.0;
}
-(char*) toString: (char*) pString
{
sprintf(pString, "%i/%i", numerator, denominator);
return pString;
}
-(Fraction*) add: (Fraction*) f
{
numerator = numerator * [f denominator] + denominator * [f numerator];
denominator *= [f denominator];
return self;
}
@end
Le programme main
Bloc de code:
#import "Fraction.h"
#import <stdio.h>
#import <stdlib.h>
int main(int argc, char *argv[])
{
if (argc < 2) {
printf("Please specify the fraction as command line arguments.");
return -1;
}
int n1, d1, n2, d2;
char* str;
Fraction* fraction1;
Fraction* fraction2;
// Create two instances of a Fraction
fraction1 = [[Fraction alloc] init];
fraction2 = [[Fraction alloc] init];
// set the fractions as entered by the user
sscanf(argv[1], "%i/%i", &n1, &d1);
sscanf(argv[2], "%i/%i", &n2, &d2);
[fraction1 setTo: n1 over: d1];
[fraction2 setTo: n2 over: d2];
// Display the sum of the two fractions
str = (char*) malloc(20 * sizeof(char));
printf("%s\n",[fraction1 toString: str]);
printf("%s\n",[fraction2 toString: str]);
printf("The value of %s + %s is %g\n", [fraction1 toString: str], [fraction2 toString: str], [[fraction1 add: fraction2] toValue]);
free(str);
[fraction1 free];
[fraction2 free];
return 0;
}