[C] programme se compile mais ne marche pas

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

  1. Contributeur
    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. Merci beaucoup !
      Ça marche très bien maintenant.

      P.S: ça ne marche pas avec "reduire\n" mais avec "reduire"
  2. Modérateur
    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. oui en effet ça ne marche pas avec le \n
      et le cas ou on le deux ne marchent pas, je m'en occupe !
  3. Contributeur
    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.
    1. Et est-ce nécessaire de mettre un \0 (moi je n'en n'ai pas mis et ça marche) ?
    2. Modérateur
      Le \0 est implicite.