请帮我纠正这段代码

时间:2018-03-17 12:37:36

标签: c++

因此,此代码从用户处获取输入并显示逐字符剥离,如下面的示例所示。然而。这段代码中存在语法和逻辑错误,我试图解决这些问题已有好几天了,但它并没有与我合作:

#include <iostream>

using namespace std;

int main()
{
    char  name[20];
    char* ptr1,*ptr2;

    cout << "Input a name -> ";

    cin >> name;

    cout << "Output : ";

    for (ptr1 = &name; ptr1 != '0'; ptr1++) {
        for (ptr2 = &ptr1; ptr2 != '0'; ptr2++) {
            cout << *ptr2;
            cout << ' ';
        }
    }
}

示例运行:

  

输入名称 - &gt;约翰

输出:

  

John ohn hn n

3 个答案:

答案 0 :(得分:0)

建议您使用调试器进行调试。像

这样的问题数量
  • ptr1 != '0'应为*ptr1 != '\0'作为您的循环失败的一个阶段&amp;它通过比较该地址的值(* ptr)而不是通过比较地址(ptr)来实现。
  • for li循环初始化部分ptr1 = &name中的
  • 错误,应该是ptr1 = name

以下是您可能需要的代码

for (ptr1 = name; *ptr1 != '\0'; ptr1++) {
      for (ptr2 = ptr1; *ptr2 != '\0'; ptr2++) {
            cout << *ptr2;
      }
      cout << ' ';
}

答案 1 :(得分:0)

您需要稍微更改两个for循环,

for (ptr1 = name; *ptr1 != '\0'; ptr1++)
{
   for (ptr2 = ptr1; *ptr2 != '\0'; ptr2++)

您试图将指针的地址与零进行比较。

希望它对你有所帮助。

答案 2 :(得分:0)

看起来你的意思如下。

#include <iostream>

int main() 
{
    const size_t N = 20;
    char name[N] = {};

    std::cout << "Input a name -> ";
    std::cin.get( name, sizeof( name ) );

    std::cout << "Output : ";

    for ( const char *p = name; *p != '\0'; ++p )
    {
        std::cout << p << ' ';
    }

    std::cout << std::endl;

    return 0;
}

程序输出可能看起来像

Input a name -> John
Output : John ohn hn n