Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
2年前关闭。
我编写了代码来反转用户输入的句子,但是当我运行此代码并编写句子时,此代码将打印出无意义的数字,而不是句子的反向版本。我需要帮助定位错误
我的意思是需要“按摩字符串的开始”指针。巴邓希什
编辑:并且您还需要更改此,在
至:
否则,实际上是根据
您也可以将所有
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
2年前关闭。
我编写了代码来反转用户输入的句子,但是当我运行此代码并编写句子时,此代码将打印出无意义的数字,而不是句子的反向版本。我需要帮助定位错误
#include <stdio.h>
#include <string.h>
void reverser(char*);
int readmassage(char[], int);
int main()
{
char mysentence[30];
readmassage(mysentence, 30);
reverser(mysentence);
printf("%s", mysentence);
system("pause");
return 0;
}
void reverser(char *massage)
{
char temp,*p;
p = massage + strlen(massage)-1;
while (p > massage) {
temp = *massage;
*massage = *p;
*p-- = temp;
}
}
int readmassage(char massage[], int lenght)
{
int ch, i = 0;
while (ch = getchar() != '\n') {
if (lenght > i)
massage[i++] = ch;
}
massage[i] = '\0';
return i;
}
最佳答案
您的问题在这里:
temp = *massage;
*massage = *p;
*p-- = temp;
massage
始终指向此处字符串中的第一个字符。因此,您将继续覆盖第一个字符,然后在下一轮中将新的第一个字符写入最后一个字符。结果是,您实际上将字符串旋转了一个字符,而不是将其反转。如果将*massage = *p;
更改为*massage++ = *p;
(或创建一个新的递增指针变量以对应于您初始化为p
的massage
),它可能会起作用。我的意思是需要“按摩字符串的开始”指针。巴邓希什
编辑:并且您还需要更改此,在
readmessage
中:while (ch = getchar() != '\n')
至:
while ((ch = getchar()) != '\n')
否则,实际上是根据
ch
是否返回0
来将1
设置为getchar()
或'\n'
,而不是输入字符。这是因为由于操作的顺序,!=
实际上在=
之前执行,如果表达式为true,则!=
给您1
,如果表达式为false,则为0
。然后,此0
或1
由ch
运算符存储在=
中。您也可以将所有
readmessage
替换为fgets
,因为它包含在标准库中,并且恰好适合这种情况(当然,除非重新实现它是您分配的一部分)。09-25 18:50