Печать персонажа из 2D-массива - PullRequest
2 голосов
/ 10 июня 2019

Используя указатели, я могу получить фактический символ ('i' в ElGenerico), который я хочу напечатать.Но на экране печатается какой-то странный символ, а не мой желаемый символ.

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

При использовании спецификатора вывода %s вывод этого кода - «ico».Но я хочу напечатать только символ «я».Поэтому я попытался использовать %c вместо %s.Не работаетВместо этого напечатана двуглавая стрелка.Может кто-нибудь сказать мне, где я иду не так?

Ответы [ 3 ]

1 голос
/ 10 июня 2019

Я рекомендую использовать скобочные обозначения для улучшения читабельности.

Изначально у вас было следующее:

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

Вам все равно придется разыменовать с *, чтобы получить желаемый результат.Это даст вам следующее:

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

Однако, это все еще немного сбивает с толку и не очень читабельно.Вы можете сделать его намного чище, используя скобочные обозначения, например:

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

Теперь гораздо меньше места для ошибок, и вы все равно получите ожидаемый результат.

Ваш окончательный код будет выглядеть примерно таккак это:

#include <stdio.h>

int main()
{
  char* name[] = {"Sami", "Kevin", "ElGenerico"};
  printf("%c", name[2][7]);
  return 0;
}
0 голосов
/ 10 июня 2019
printf("%c",*(*(name+2)+7));

Я использовал это, и это решено, спасибо за помощь @David и @rcs ...

0 голосов
/ 10 июня 2019

Вы указываете не на тот адрес. Используйте это вместо:

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

Поскольку вы ссылаетесь на третий элемент в массиве name, вы можете использовать

name[2]

Затем вы хотели поместить 7-й элемент слова ElGenerico, поэтому нам нужно добавить 7 к адресу:

name[2] + 7

После того, как мы получим правильный адрес, мы распечатаем значение этого адреса и используем знак *:

*(name[2] + 7)
...