CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

expected identifier or '(' before 'if'

[JV]Gameek
[JV]Gameek
Niveau 7
20 janvier 2013 à 13:52:07

Bonjour,
Je débute depuis peu dans la programmation en C.
J'ai donc voulu tester un petit programme par moi même :

  1. include <stdio.h>
  2. include <stdlib.h>

int main()

{
printf("Souhaitez-vous effectuer une addition, une soustraction, une multiplication, une division ou un modulo? (ecrivez le mot)");
}

int resultat = 0, nombre1 = 0, nombre2 = 0;

if scanf("addition")
{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 + nombre2;

printf("%d + %d = %d", nombre1, nombre2, resultat);

}

else if scanf("soustraction")
{

printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 - nombre2;

printf("%d - %d = %d", nombre1, nombre2, resultat);
}

else if scanf("multiplication")
{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 * nombre2;

printf("%d * %d = %d", nombre1, nombre2, resultat);
}

else if scanf("division")
{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 / nombre2;

printf("%d / %d = %d", nombre1, nombre2, resultat);
}

else if scanf("modulo")
{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 % nombre2;

printf("%d % %d = %d", nombre1, nombre2, resultat);
}

Seulement quand je veux assembler et compiler, j'obtiens le message d'erreur suivant :

error : expected identifier or '(' before 'if'

J'obtiens ce message pour les lignes 12, 25, 38, 50, 62.

Pourriez-vous me dire d'où vient l'erreur?

Merci :)

chris_27
chris_27
Niveau 10
20 janvier 2013 à 13:59:09

Tu veux vraiment que le code de ta fonction main s'arrête à la ligne 8 ? :doute:

[JV]Gameek
[JV]Gameek
Niveau 7
20 janvier 2013 à 14:04:19

ah oui c'est vrai ^^ j'avais omis ce détail :p

[El-pr0n]
[El-pr0n]
Niveau 10
20 janvier 2013 à 14:05:33

Tu écris :

:d) if condition

mais il faut toujours mettre la condition entre parenthèses :

:d) if (condition)

Par contre, même avec des parenthèses, "if(scanf("addition"))" ça ne se fait pas. Tu dois stocker ce que l'utilisateur tape au clavier avec scanf() dans une variable, et ensuite tester cette variable. Tu ne peux pas faire un scanf() directement dans le "if".

chris_27
chris_27
Niveau 10
20 janvier 2013 à 14:09:35

(j'ai bien fait d'arrêter de lire à la première erreur moi, tiens. :-) )

Par contre, c'est tout à fait valide de faire un scanf dans un if. Je rappelle que scanf renvoie un entier représentant le nombre de variables auxquelles scanf a pu affecter une valeur. Dans le cas où il n'y a qu'une variable, un if(scanf(...)) permet de savoir si scanf a marché ou non. Après, ça dépasse un peu le niveau de l'OP.

[JV]Gameek
[JV]Gameek
Niveau 7
20 janvier 2013 à 14:09:44

du coup les scanf je les place où ?

[El-pr0n]
[El-pr0n]
Niveau 10
20 janvier 2013 à 14:25:46

Chris_27 Voir le profil de Chris_27
Posté le 20 janvier 2013 à 14:09:35 Avertir un administrateur
(j'ai bien fait d'arrêter de lire à la première erreur moi, tiens. :-) )

Par contre, c'est tout à fait valide de faire un scanf dans un if. Je rappelle que scanf renvoie un entier représentant le nombre de variables auxquelles scanf a pu affecter une valeur. Dans le cas où il n'y a qu'une variable, un if(scanf(...)) permet de savoir si scanf a marché ou non. Après, ça dépasse un peu le niveau de l'OP.

:d) Ouais :oui: c'est juste que ça saute aux yeux que ce n'est pas ce qu'il voulait faire :hap:

Scanf est une fonction qui attend un format + une(des) adresse(s) auxquelles stocker les valeurs qu'il récupère, or là tu ne lui passes qu'une string qu'il ne saura pas exploiter :non2: Il faut que tu relises bien ton tuto sur la saisie clavier pour comprendre un minimum la fonction scanf(). Je dis bien un minimum, car tu ne pourra pas la comprendre tant que tu n'auras pas vu les pointeurs et les fonctions variadiques malheureusement. Mais ne te presses pas, ce n'est pas indispensable pour le moment.

Juste un exemple pour récupérer un entier :

int main(void)
{
     int plop = 0;
     scanf("%d", &plop); /* %d : lire un entier / &plop : le stocker à l'adresse de plop */
     printf("%d", plop); /* %d : afficher un entier, et ici en l'occurence, l'entier contenu dans plop */
     return 0;
}

[JV]Gameek
[JV]Gameek
Niveau 7
20 janvier 2013 à 14:28:55

C'est bon je viens de trouver autre chose pour arriver à mes fins :p :

  1. include <stdio.h>
  2. include <stdlib.h>

int main()

{
printf("Souhaitez-vous effectuer une addition (1), une soustraction (2), une multiplication (3), une division (4) ou un modulo (5)? (ecrivez le numero)");

int nombre1 = 0, nombre2 = 0, resultat = 0, choix = 0;

{
scanf("%d", &choix);
}

if (choix == 1)
{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 + nombre2;

printf("%d + %d = %d", nombre1, nombre2, resultat);
}

else if (choix == 2)

{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 - nombre2;
printf("%d - %d = %d", nombre1, nombre2, resultat);
}

else if (choix == 3)

{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 * nombre2;
printf("%d * %d = %d", nombre1, nombre2, resultat);

}

else if (choix == 4)

{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 / nombre2;
printf("%d / %d = %d", nombre1, nombre2, resultat);
}

else if (choix == 5)

{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 % nombre2;
printf("%d % %d = %d", nombre1, nombre2, resultat);
}
}

Merci tout de même d'avoir pris la peine de m'aider ! :)

[El-pr0n]
[El-pr0n]
Niveau 10
20 janvier 2013 à 14:33:12

J'ai pas tout lu, mais ça doit sûrement mieux marcher que ce que t'as mis dans ton premier message :peur:

Y'a juste qu'à ton premier scanf(), les accolades ne servent à rien dans le cas présent :hap:

[El-pr0n]
[El-pr0n]
Niveau 10
20 janvier 2013 à 14:45:40

Et tes résultats ne seront pas bons ici :

else if (choix == 4)

{
printf("Entrez le nombre 1 : ");
scanf("%d", &nombre1);
printf("Entrez le nombre 2 : ");
scanf("%d", &nombre2);

resultat = nombre1 / nombre2;
printf("%d / %d = %d", nombre1, nombre2, resultat);
}

Tu divises un entier par un entier et tu stockes ça dans un entier :hap: Tes résultats seront tronqués.

Change résultat en float, et au moment de la division tu fais:

resultat = (float) nombre1 / (float) nombre2;

Mais je sais pas si tu as vu ce qu'était le cast :question:

chris_27
chris_27
Niveau 10
20 janvier 2013 à 15:47:26

[El-pr0n]: ton utilisation du cast est malheureusement non correcte. Déjà, le type à utiliser, c'est double et non float (double est plus précis, rarement plus lent, et mieux supporté sur les architectures exotiques). Et ensuite, vu que resultat est un entier... le résultat de ta division entre float sera arrondie méchamment vers un entier de toute façon. :-)))

[El-pr0n]
[El-pr0n]
Niveau 10
20 janvier 2013 à 16:08:21

Chris_27 Voir le profil de Chris_27
Posté le 20 janvier 2013 à 15:47:26 Avertir un administrateur
[El-pr0n]: ton utilisation du cast est malheureusement non correcte. Déjà, le type à utiliser, c'est double et non float (double est plus précis, rarement plus lent, et mieux supporté sur les architectures exotiques). Et ensuite, vu que resultat est un entier... le résultat de ta division entre float sera arrondie méchamment vers un entier de toute façon. :-)))

:d) J'ai écris juste au dessus de changer "resultat" en float :-)))

Depuis quelques mois je ne bosse que sur OpenGL et pour un soucis de compatibilité, volume de donnée, performance, je n'utilise que des floats. J'en utilise une masse considérable, sans besoin de précision à 14 chiffres après la virgule, donc j'ai un peu tendance à oublier le double ces temps-ci :peur: En effet, le calcul du résultat ici ne demande pas vraiment d'optimisations ( :hap: ) et donc peut être traité avec un double.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment