如何将SCANF与指向数组的指针一起使用?

时间:2019-02-25 07:35:55

标签: c++ pointers

编写一个程序,该程序接受用户的C字符串输入并反转该字符串的内容。您的程序应通过使用两个指针来工作。 “ head”指针应设置为字符串中第一个字符的地址,而“ tail”指针应设置为字符串中最后一个字符(即终止null之前的字符)的地址。程序应交换这些指针引用的字符,将“ head”增加以指向下一个字符,将“ tail”减少以指向倒数第二个字符,依此类推,直到所有字符都被交换并且整个字符串反转。 预期的行为: 输入输入文字 大家好 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++).

1 个答案:

答案 0 :(得分: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并未对代码进行太多检查,因此即使进行了上面建议的更改,它也可能不正确。