【问题标题】:C: 2D-Array doesn't get printed out from the startC: 2D-Array 没有从一开始就被打印出来
【发布时间】:2013-12-11 03:13:29
【问题描述】:

我正在尝试打印我的程序的 2D 数组,但输出中途开始(在数据包 18 并且它没有打印出“数据包 18:”。但之后它会正确打印出其余部分到最后. 这是怎么回事?既然我已经将计数器 j 初始化为 0,我不明白为什么它会以 18 开头并且不显示文本。我做错了什么?

int i;
int j;
int s[7][50];
i = 0;

for (j = 0; j < 50; j++)
{
    printf("Packet %d:\n", j + 1);
    for (i = 0; i < 7; i++)
    {
        printf("Value of line %d: %d", i + 1, s[i][j]);
        printf("\n");
    }
    printf("\n");
}

【问题讨论】:

  • 显示s的声明。
  • 你能发布一些更完整的东西吗?包含 s 的声明也会有所帮助。
  • 我还没有足够的知识来写入文件,但我确实将循环限制为 30,现在它可以正确显示,所以看起来你是对的。我不知道有限制,奇怪的是它在开始而不是结束时切断了出口。
  • 就目前而言,s 未初始化,因此从技术上讲,您会得到未定义的行为。您还从自然顺序向后处理数组,因此您将比其他方式更努力地处理计算机上的缓存,但看起来它应该可以工作。
  • 也许你可以使用 ./yourprogram |更多(在 *nix 上)

标签: c arrays printf


【解决方案1】:

如果您在控制台窗口中运行此程序,并依靠控制台窗口的回滚来查看程序的输出,最有可能发生的情况是程序的输出对于回滚历史来说太长了。

尝试将输出重定向到文件。如果您在 Windows、Linux 或 MacOS X 下的命令提示符下运行它,您可以大致如下进行:

myprogram > file.txt

(如果您使用的是 Linux 或 MacOS X,您可能需要说 ./myprogram &gt; file.txt。)

如果您在文本编辑器中检查 file.txt,我想您会看到程序的完整输出。

【讨论】:

  • 这样做并且输出文件中的输出正确保存。
【解决方案2】:

此代码包含一些初始化,并产生我期望的输出:

#include <stdio.h>

int main(void)
{
    int i;
    int j;
    int s[7][50];

    for (i = 0; i < 7; i++)
    {
        for (j = 0; j < 50; j++)
            s[i][j] = 100 * (i + 1) + j + 1;
    }

    for (j = 0; j < 50; j++)
    {
        printf("Packet %d:\n", j + 1);
        for (i = 0; i < 7; i++)
        {
            printf("Value of line %d: %d", i + 1, s[i][j]);
            printf("\n");
        }
        printf("\n");
    }

    return 0;
}

部分示例输出:

Packet 1:
Value of line 1: 101
Value of line 2: 201
Value of line 3: 301
Value of line 4: 401
Value of line 5: 501
Value of line 6: 601
Value of line 7: 701

Packet 2:
Value of line 1: 102
Value of line 2: 202
Value of line 3: 302
Value of line 4: 402
Value of line 5: 502
Value of line 6: 602
Value of line 7: 702

Packet 3:
Value of line 1: 103
Value of line 2: 203
Value of line 3: 303
Value of line 4: 403
Value of line 5: 503
Value of line 6: 603
Value of line 7: 703

Packet 4:
Value of line 1: 104
Value of line 2: 204
Value of line 3: 304
Value of line 4: 404
Value of line 5: 504
Value of line 6: 604
Value of line 7: 704

...

Packet 47:
Value of line 1: 147
Value of line 2: 247
Value of line 3: 347
Value of line 4: 447
Value of line 5: 547
Value of line 6: 647
Value of line 7: 747

Packet 48:
Value of line 1: 148
Value of line 2: 248
Value of line 3: 348
Value of line 4: 448
Value of line 5: 548
Value of line 6: 648
Value of line 7: 748

Packet 49:
Value of line 1: 149
Value of line 2: 249
Value of line 3: 349
Value of line 4: 449
Value of line 5: 549
Value of line 6: 649
Value of line 7: 749

Packet 50:
Value of line 1: 150
Value of line 2: 250
Value of line 3: 350
Value of line 4: 450
Value of line 5: 550
Value of line 6: 650
Value of line 7: 750

【讨论】:

    【解决方案3】:

    每件事都是正确的,唯一的问题是您错误地将 for() 循环放在错误的位置,或者根据您的程序,您现在可能不太了解二维数组

         int s[7][50];
    

    它的意思是 7 行和 50 列。完整的图片是七个一维数组,每个数组有五十个元素。现在要打印它的数据,代码是

       1   int i,j;
       2   for(i=0;i<7;i++)       
       3    for(j=0;j<50;j++) 
       4      printf("s[%d][%d]=%d \n",i,j,s[i][j]);
    

    第 1 行:声明两个局部变量 第 2 行:这里我们首先一个一个地迭代第零个数组及其五十个元素 我们从第 3 行得到。 第 3 行:现在对于每个 1d 数组,我们使用第二个 for 循环为其每个元素 第 4 行:printf 函数也可以简单地打印值及其位置。 如果你能看到这张图就OK了。

    【讨论】:

    • 我删除了你的照片。它很模糊,很难理解。
    • 我试图让那个变得可见,但如果你想要图像我无法管理,那么我将尝试以不同的方式表示相同的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多