[C] programme se compile mais ne marche pas

oeza -  
 oeza -
Bonjour,
je voudrais faire un programme qui permettra de trouver la taille d'agrandissement d'une image.
Mon code se compile sans problème mais quand je lance la programme, un message d'erreur s'ouvre.
Voila mon code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char hauteurlargeur [50]={0};
char reduireagrandir [50]={0};
float tailleimage;
float facteurproportionnalite;
float resultat;

    printf("Voulez-vous reduire ou agrandir l'image ?\nEcrivez reduire ou agrandir\n");
    scanf("%s", reduireagrandir);
    printf("\n");

    printf("Voulez-vous entrer la largeur ou la hauteur de l'image ?\nEcrivez hauteur ou largeur\n");
    scanf("%s", hauteurlargeur);
    printf("\n");

    printf("Quelle est la %s de l'image a %s ?\n", hauteurlargeur, reduireagrandir);
    scanf("%f", &tailleimage);
    printf("\n");

    printf("%s par combien ?\n", reduireagrandir);
    scanf("%f", &facteurproportionnalite);
    printf("\n");

     // c'est a partir de la qu'il y a un problème
    if (strcmp( reduireagrandir, 'reduire\n') == 0)
    {
        resultat = tailleimage/facteurproportionnalite ;
        printf("%f", resultat);
    }
    else if (strcmp( reduireagrandir, 'agrandir\n')== 0)
    {
        resultat = tailleimage*facteurproportionnalite;
        printf("%f", resultat);
    }

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

C'est surprenant que ton programme compile sans problème.
Dans strcmp, tu as mis 'reduire\n', ce sont des guillemets qu'il faut.

Et n'oublie pas de mettre un return 0; à la fin.
1
oeza
 
Merci beaucoup !
Ça marche très bien maintenant.

P.S: ça ne marche pas avec "reduire\n" mais avec "reduire"
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Les chaînes de caractères se mettent entre guillemets pas entre apostrophes !
De plus je ne suis pas convaincu qu'il faille mettre le \n dans un test comme cela...
Enfin, il faudrait prévoir le cas où on ne rentre dans aucun des deux attendus :

if (strcmp(reduireagrandir, "reduire") == 0)
    resultat = tailleimage/facteurproportionnalite;
else if (strcmp(reduireagrandir,"agrandir")== 0)
    resultat = tailleimage*facteurproportionnalite;
else
    reultat = -1;

printf("%f\n", resultat);
1
oeza
 
oui en effet ça ne marche pas avec le \n
et le cas ou on le deux ne marchent pas, je m'en occupe !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui, il ne faut pas mettre le \n puisqu'il n'est pas stocké lors d'une lecture avec scanf("%s",...). Il l'aurait fallu avec fgets par exemple.
0
oeza
 
Et est-ce nécessaire de mettre un \0 (moi je n'en n'ai pas mis et ça marche) ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Le \0 est implicite.
0
oeza
 
Ok
0