Обратная строка в C с использованием цикла for - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в C и не понимаю, почему мой код не работает.Цель состоит в том, чтобы просто перевернуть строку.

char word[20];
int i, len;

printf("Enter word: ");
    scanf("%s", &word);

len = strlen(word);

printf("String reversed: "); 
for (i = len-1; i >= 0; i--){
    printf("%s", word[i]);
}

1 Ответ

1 голос
/ 29 мая 2019

In

printf("%s", word[i]);

% s - неправильный формат, потому что вы пишете символ, а не строку

Из этого числа:

  • естественный тип для индекса size_t, а не int , используйте size_t для обоих i и len , и в этомcase изменить цикл для использования индекса без предположения, что он может быть отрицательным

  • , если входная строка содержит более 19 символов scanf запишет из word с неопределенным поведением, ограничить размер, используя формат% 19s (19 вместо 20, чтобы иметь место для завершающего нулевого символа)

  • слово isмассив, не используйте '&' для указания его адреса в scanf

  • проверьте результат scanf , если вы хотите обнаружитьEOF

  • очистить вывод, записав новую строку после цикла

Таким образом, возможный путь:

char word[20];

printf("Enter word: ");
if (scanf("%19s", word) == 1) {   
  printf("String reversed: "); 

  for (size_t i = strlen(word); i != 0; i--){
    printf("%c", word[i-1]);
  }
  putchar('\n');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...