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;
}