【问题标题】:C++ Nested loops/Dynamic Array EC++ 嵌套循环/动态数组 E
【发布时间】:2016-03-26 21:41:08
【问题描述】:

我编写的程序应该从用户输入中获取多行,然后显示多行星号,第一行有一个星号,第二行有两个星号,依此类推。 它有效,但我有两个问题:

1) 每行的开头总是有一个附加符号,我不知道它的来源。我试过显示数组的 [0] 值,但它似乎不是来自那里。

2) 在输入一些行数(不是全部)时,程序会在行之后立即显示它们以及附加的随机符号。这是动态内存分配的问题吗?

感谢您的帮助。

#include<iostream>
using namespace std;
int main()
{
cout << "Enter the number of rows: ";
int number;
cin >> number;
int q = number + 1;
char dot = '.';
char asterisk = '*';
char * array1 = new char[q];

int n, m, s;
n = number;
for (n; n > 0; n--)
    {
        array1[n] = asterisk;

        for (m = n - 1; m > -1; m--)
            {
                array1[m] = dot;
            }

        cout << array1 << endl;
    }
delete [] array1;
return 0;
}

【问题讨论】:

  • 数组索引从0开始。因此,如果您从 10 行开始,第一次迭代会将 array1[10] 设置为 * - 但它实际上是字符串中的第 11 个字符。
  • 您更严重的问题是您的字符串不是以空值结尾的。您需要为一个额外的字符分配空间并将其设置为 0。
  • 您没有初始化分配的内存,因此它可能包含任何内容,打印它可能会导致未定义的行为,因为您没有使用 nul 终止它
  • 我建议尽可能使用 STL 容器。使用 std::string 和 std::vector 而不是手动分配。难道只是为了学习?即便如此,最好还是学习“正确”的方式。

标签: c++ arrays loops for-loop


【解决方案1】:

char[] 不以 NUL 字符终止,因此

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 2012-03-09
    • 2017-07-01
    • 1970-01-01
    • 2022-05-12
    • 2015-05-24
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多