反转字符串 - 循环不执行

Reversing a string - Loop doesn't execute

我编写了一个程序来反转句子中的字符(不使用 strrev 等字符串函数)。这是它应该做什么的一个例子

输入 - hi john
输出 - ih nhoj

节目:

#include <stdio.h>
main()
{
int i,j,k=0,count=0;
char a[100],temp;
printf("enter name\n");
gets(a);
while(a[k]!=0)
{
    count++;
    k++;
}
printf("%d\n",count);
for(i=0,j=count;i<j;i++,j--)
{
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}
printf("%s\n",a);
}

问题是 for 循环没有执行,只有 while 循环执行。

请帮忙。

j的起始值应该是count-1,而不是count。第 count 位置的元素是不想交换的零终止符!

for(i=0,j=count-1;i<j;i++,j--)
               ^^

不要使用gets(),因为它不能防止缓冲区溢出并使用fgets()gets() 已从 C11(最新的 C 标准)中删除。使用 fgets() 时需要注意的一件事是,如果缓冲区中有足够的 space 需要删除,它也会读取换行符。

你应该意识到在 while 循环结束时 count 存储字符串的长度 entered.For 例如如果你输入 hello count 保存 5.但字符串的最后一个元素将位于 count-1 索引处而不是 count 索引处,因为索引从 0.

开始

因此您应该将 j 设置为 count-1。此外,将 main return int 设置为一个很好的做法。

replace

for(i=0,j=count;i<j;i++,j--)

with

for(i=0,j=count-1;i<j;i++,j--)