Corriger cela si, sinon les déclarations

Les problèmes semblent être sur

Ligne 18: avertissement: comparaison entre un pointeur et un entier
Ligne 22: erreur: expression attendue avant ‘else’

Qu’est-ce que je fais mal? Existe-t-il une meilleure façon de le faire?

#include  int main(void) { char pname[25]; char Y[1]; char N[1]; char choice[1]; printf("when responding to Yes or No questions use Y/N.\n"); printf("Hello,traveler Welcome to the Castle of Atal...." "What is your name?\n"); scanf("%s", &pname); printf("Greeting's %s What bring's you to the kingdom of Tharnos?\n", pname); printf("I see how intresting do you wish to enter %s ?\n", pname); scanf("%c", &choice); if (choice == 'Y'); printf("Enter %s...\n", pname); else (choice == 'N'); printf("Farewell lost soul!\n"); return 0; } 

Dans votre code, changez les définitions

 char Y [1]; char N [1]; char choice[1]; 

à

  char Y; char N; char choice; 

Sinon, avec la définition actuelle, choice représente un array (de 1 élément), qui

  • n’est pas nécessaire ici, un seul caractère fonctionnera parfaitement.
  • déclenchera l’avertissement de choice == 'Y' , car vous ne pouvez pas comparer le tableau avec l’opérateur == .

Cela dit,

  1. scanf ("%c",&choice); devrait être scanf (" %c",&choice); pour éviter la newline précédente.
  2. scanf ("%s",&pname); devrait être scanf ("%24s",pname); pour éviter le dépassement de tampon.

et, comme mentionné dans la réponse de M. @ iharob ,

  1. if (choice == 'Y'); devrait être if (choice == 'Y') (le ; supprimé), sinon, la déclaration if est effectivement inutile.
  2. Il n’y a pas d’ évaluation de l’expression conditionnelle pour else . Vous pouvez toutefois utiliser else if(choice == 'N') .

Votre déclaration si ont des problèmes

  1. Vous ne devez pas mettre un point-virgule à la fin d’une instruction if, cela voudrait dire une instruction if avec un bloc de code vide.

  2. La syntaxe

     else (choice == 'N'); 

    est faux, il y a un équivalent si

     else if (choice == 'N'); /* ^ you should add `if' after `else' */ 

Votre code a plus de problèmes, mais vous ne leur avez pas posé de question. @ SouravGhosh les a quand même abordés .

Retirez les points-virgules.

 if (choice == 'Y'); <----- remove this semicolon { printf ("Enter %s...\n",pname); } 

Ce qui précède est équivalent à:

 if( choice == 'Y') ; /* Do nothing */ printf( ... ); else /* syntax error, not paired with an if statement */ ; 

Votre syntaxe n’est pas correcte, vous devez utiliser la bonne syntaxe:

 if (condition) { } else if (condition) { } 

ou vous pouvez l’utiliser si vous avez quelque chose par défaut à faire lorsqu’aucune de vos conditions n’est remplie:

 if (condition) { } else if (condition) { } else { // you will get in this if when all of your conditions become false }