【问题标题】:C array problems... (Printing and defining)C数组问题...(打印和定义)
【发布时间】:2015-02-12 14:15:01
【问题描述】:

只是编写了一些代码来使用冒泡排序对数组进行排序,但一开始我什至无法定义一个数组并打印它。

代码:

#include <stdio.h>

int main ()  {

int test[] = {9,9,9,9,9};       //define array

test[2] = 3;

bool checker = false;           //is it sorted?

int i = 0;

for(int i = 0; i<=4; i++)                   //set random numbers for array
{
    int g;
    g = 4+i;
    test[i] = g;
    i++;
}

for (int i = 0; i <= 4; ++i )   //print array as normal
{

    printf(", ", test[i]);

}

执行时总是输出:

, , , ,

所以数组是空的?还是我打印错了?还是什么?

【问题讨论】:

  • 您使用i++ 递增两次 - 一次在 for 语句中,一次在正文中。这很糟糕......
  • 顺便说一句。像这样编写 for 循环是一个好习惯:for (int i = 0; i &lt; 5; ++i) 注意数字 5 而不是 4,这样您就可以立即看到元素的数量,并且您不必在脑海中减去 1,并且总是更喜欢预增量 ++i (和其他前缀运算符)超过 postincrement i++ (或其他后缀运算符)。原因是性能 - 在某些情况下,postfix 会导致创建临时副本。
  • 数组不能为空——它总是包含相同数量的东西。您的问题主要是因为在使用之前没有弄清楚printf 的工作原理。
  • @V.K.性能不是任何基本类型(如int)的原因,而仅适用于用户定义的类型(在某些情况下)。 ++ii++i += 1 都将创建相同的代码,至少在启用优化后。坚持使用其中一种是很好的风格,因为它可以对用户定义的类型产生影响,所以应该坚持++i

标签: c arrays printf


【解决方案1】:

你打印错了。

您要打印的行应为printf("%d, ", test[i]);

也不是您已将问题标记为 C++,而是使用 C 相关术语。您的#include &lt;stdio.h&gt; 应该替换为#include &lt;iostream&gt;,并且您应该使用cout 而不是printf 来输出数据。

【讨论】:

  • 顺便说一句,在 C++ 中使用 C 标准库工具非常好(有时 C 库更出色。或者至少在某个方面更出色,例如国际化)。即使代码是用 C 风格编写的,如果它编译为 C++,它就是 C++。
  • 确实如此。但是我只是提到它,因为我觉得OP可能没有意识到这一点。
【解决方案2】:

您的代码中有两个问题。

首先,初始的'for'循环使用'i'作为它的计数器变量,你的增量条件是'i++'。这意味着“i”在每次循环迭代中自动递增;然而,在循环中,您指定了“i++”,这意味着您将看到“i”的值在每次传递时都发生了两次。消除无关的增量。

其次,您打印的数组不正确。您需要添加格式限定符,例如 '%d' 来告诉 printf 使用第一个参数作为该说明符的替换。

最后,您已经为这段代码指明了 C++,但实际上并非如此。这是经典的 C。

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 2020-05-13
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2021-10-13
    • 2014-12-15
    • 2015-03-10
    相关资源
    最近更新 更多