如何使用带有指向数组的指针的SCANF?

问题描述 投票:-1回答:1

编写一个程序,接受来自用户的C字符串输入并反转字符串的内容。你的程序应该使用两个指针。 “head”指针应设置为字符串中第一个字符的地址,“tail”指针应设置为字符串中最后一个字符的地址(即终止null之前的字符)。程序应该交换这些指针引用的字符,增加“head”指向下一个字符,减去“tail”指向倒数第二个字符,依此类推,直到所有字符都被交换为止字符串反转。预期行为:输入输入文本hello guys syug olleh

这是任务任务。这是我的代码:

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
    char inp_str[50];
    char* hl;
    char *tl;
    cout<<"Enter string ";
    scanf("%s",inp_str);
    hl=&inp_str[0];
    tl=strchr(inp_str,'\0')-1;
    for (hl; hl <= tl; hl++){
        for(tl;tl>= hl;tl--) {
            char temp_val;
            temp_val=*hl;
            *hl=*tl;
            *tl=temp_val;
        }
    }
    cout<<inp_str;
    return 0;
}

我收到了一个错误

"expression result unused [-Wunused-value]" for tl in for(tl;tl>= hl;tl--) and hl in for (hl; hl <= tl; hl++).
c++ pointers
1个回答
2
投票

数组名称是指向(数组的第一个元素)的指针。

scanf("%s", inp_str);

您的主要错误是您使用了两个循环,您应该只使用一个循环

for (hl; hl <= tl; hl++){
    for(tl;tl>= hl;tl--)
{
    char temp_val;
    temp_val=*hl;
    *hl=*tl;
    *tl=temp_val;
}
}

for (; hl <= tl; hl++, tl--)
{
    char temp_val;
    temp_val=*hl;
    *hl=*tl;
    *tl=temp_val;
}

想想反转字符串的过程,该过程是否需要嵌套循环,还是只需要一个循环?

您的编译器错误发生是因为您在for循环的第一个表达式中使用了h1t1。这些表达式的结果是未使用的(因此错误),只是将它们留在外面,如我的例子中所示。

PS没有检查过很多代码,所以即使上面提到的更改也可能不正确。

© www.soinside.com 2019 - 2024. All rights reserved.