2
votes

Impression d'un caractère à partir d'un tableau 2D

À l'aide de pointeurs, je peux accéder au caractère réel («i» dans ElGenerico) que je veux imprimer. Mais un caractère étrange est imprimé à l'écran, plutôt que mon caractère souhaité.

#include<stdio.h>
int main()
{
    char *name[]={"Sami","Kevin","ElGenerico"};
    printf("%c",(*(name+2)+7));
    return 0;
}

Avec mon utilisation du spécificateur de sortie % s , la sortie de ce code est "ico". Mais je veux imprimer uniquement le caractère «i». J'ai donc essayé d'utiliser % c , au lieu de % s . Ça ne marche pas. Au lieu de cela, une double flèche est imprimée. Quelqu'un peut-il me dire où je vais mal?


6 commentaires

printf ("% c", * (* (nom + 2) +7)) (il vous manque le premier '*' ) Mieux vaut utiliser le nom [2] [7]


Merci Monsieur, j'ai compris maintenant


Monsieur, pourquoi diriez-vous que le nom [2] [7] est le meilleur choix?


Elle est plus lisible que la notation par pointeur. * (* (nom + 2) + 7) est beaucoup plus compliqué que nom [2] [7] , bien que les deux soient entièrement équivalents.


Ce n'est pas parce que la langue nous permet d'utiliser quelque chose que nous devrions le faire. nom [2] [7] = lisible. * (* (nom + 2) + 7) = illisible. 7 [2 [name]] = illisible. nom ?? (2 ??) ?? (7 ??) = illisible. 7<:2<:name:>:> = illisible. Il existe d'innombrables façons d'écrire des C. extrêmement moche mais valide. Cela ne veut pas dire que nous devrions utiliser ces méthodes.


@Lundin et user3121023 SIr, où pouvons-nous apprendre des syntaxes comme celles-ci? Je ne les ai jamais rencontrés et j'adore ça!


3 Réponses :


0
votes

Vous pointez vers la mauvaise adresse. Utilisez plutôt ceci:

*(name[2] + 7)

Puisque vous faites référence au troisième élément du tableau name , vous pouvez utiliser

name[2] + 7

Ensuite, vous vouliez mettre le 7ème élément du mot ElGenerico , donc nous devons ajouter 7 à l'adresse:

name[2]

Après nous obtenir l'adresse correcte, puis nous imprimons la valeur de cette adresse, et nous utilisons le signe * :

printf("%c",(*(name[2]+7)));


0 commentaires

0
votes
printf("%c",*(*(name+2)+7));
I used this, and it's solved, thanks for the help @David and @rcs...

1 commentaires

C'est pourquoi nous n'écrivons pas un tel code trash mais plutôt name [2] [7] , qui est équivalent à 100%.



1
votes

Je recommande d'utiliser la notation entre crochets pour une meilleure lisibilité.

Au départ, vous aviez ceci:

#include <stdio.h>

int main()
{
  char* name[] = {"Sami", "Kevin", "ElGenerico"};
  printf("%c", name[2][7]);
  return 0;
}

Vous auriez encore besoin de déréférencer avec * pour obtenir le résultat souhaité. Cela vous donnerait ceci:

printf("%c", name[2][7]);

Cependant, cela reste un peu déroutant et pas très lisible. Vous pouvez le rendre beaucoup plus propre en utilisant la notation entre crochets, comme ceci:

printf("%c",*(*(name+2)+7));

Maintenant, il y a beaucoup moins de place pour l'erreur et vous obtenez toujours le résultat attendu.

Votre code final ressemblerait à ceci:

printf("%c",(*(name+2)+7));


0 commentaires