使用for循环在C中反转字符串

时间:2019-05-29 14:25:45

标签: c

我是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 个答案:

答案 0 :(得分:1)

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

%s是错误的格式,因为您写的是字符而不是字符串

除此之外:

  • 索引的自然类型是size_t而不是 int i len <都使用size_t / em>,并且在这种情况下,请更改循环以使用索引,而不必假定它可以为负数

  • 如果输入字符串的字符数超过19个,则 scanf 会以未定义的行为从 word 中写出,请使用%19s格式限制大小(19而不是20来放置结尾的空字符)

  • word 是一个数组,请勿使用'&'在 scanf

  • 中提供其地址
  • 如果要检测EOF,请检查 scanf 的结果

  • 在循环后刷新输出并写换行符

所以可能的方法是:

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');
}