【问题标题】:Question regarding C loops关于C循环的问题
【发布时间】:2011-01-22 01:18:32
【问题描述】:

我不确定为什么这没有返回应有的内容,也许你们中的一个可以帮助我。我在 C 中有以下 for 循环:

for (i=0; i<nrow; i++) {
    dat[k]=l.0;
    k++;
}

现在,您会认为这会将dat 的所有值(其中有nrow 值)设置为1.0;相反,它被设置为 0。程序编译良好,一切顺利。内存已正确分配,dat 定义为double

这是产生 0 的原因吗?我猜 0 来自 dat 变量的初始化(因为我使用 calloc 进行内存分配,它应该将变量初始化为 0(但并非总是如此))。

编辑:请注意,我没有将其定义为dat[i] 是有特定原因(这很重要)。此外。 k 被定义为整数并被初始化为 0。

编辑2:下面是整个代码:

#include "stdio.h"
#include "stdlib.h"
#define NCH 81

// Generate swap-mode data for bonds for input.conf file

int main() 
{
    int i,j,k;
    int **dat2;
    double *dat;

    int ns = 500;

    int nrow = NCH*(ns-1);

    dat = (double*) calloc(nrow, sizeof(double));
    dat2 = (int**) calloc(nrow,sizeof(int*));

    /*for (i=0; i<nrow; i++) {
        dat2[i] = (int*) calloc(2, sizeof(int));
        for (j=0; j<2; j++)
            dat2[i][j] = 0;
    }*/

    k=0;

    printf("\nBreakpoint\n");

    /*for (i=0; i<81; i++) {
        for (j=0; j<250; j++) {
            dat[k] = j+1;
            k++;
        }

        for (j=251; j>1; j++) {
            dat[k] = j-1;
            k++;
        }
    }*/

    FILE *inp;
    inp = fopen("input.out", "w");

    for (i=0; i<nrow; i++) {
        dat[k]=1.0;
        k++;
    }

    //fprintf(inp, "%lf\n", dat[i]);

    printf("%d", dat[nrow]);
    printf("\nDone\n");
    fclose(inp);

    return 0;
}

谢谢! 阿米特

【问题讨论】:

  • 有什么理由你在 1.0 中有一个 l 而不是 1?此外,其余代码将很有用(在其中初始化指针和变量),因为这会对结果产生影响。此外,当您将它们打印出来时,您可能没有正确地迭代或访问数组中的值。
  • 是 dat[k] = 'ell'.0;而不是 one.0 在此处或在您的源中转录时出现拼写错误?
  • 其余代码已提供

标签: c for-loop


【解决方案1】:
printf("%d", dat[nrow]);

无效,因为 dat 的第 nrow'th 元素不存在。

【讨论】:

  • 是的。返回 dat[nrow-1] 实际上返回 1.0。谢谢
【解决方案2】:

你确定你从零开始'k'吗?

在您发布的示例中,您使用的是 l 而不是 1 - 这只是一个错字吗?

【讨论】:

  • 对不起。这是一个错字。我刚刚修复它,它仍然返回 0.0000
【解决方案3】:
for (i=0; i<nrow; i++) {
    dat[k]=1.0;
    k++;
}

应该可以的。

【讨论】:

  • 我有 1.0,这是我的情况下的拼写错误,我会在描述中修复它
【解决方案4】:

两件事:

我假设 l.0 是一个类型,而你的 l 实际上是一个 1。

其次,为什么在 for 循环中使用 k 而不是 i?尝试改用这个:

for (i=0; i<nrow; i++) {
    dat[i]=1.0;
}

【讨论】:

  • 我特别不想这样做。这背后是有原因的,我现在不想谈。但如果你看看评论的东西,也许你会明白。
【解决方案5】:

要么这样,你的编译器/硬件就有问题。

k = 0;

for (i=0; i < nrow; i++) {
    dat[k++] = 1.0f;
}

printf("%d, %d", dat[0], dat[nrow - 1]);

【讨论】:

    【解决方案6】:

    当你 printf("%d", dat[nrow]) 时,dat[nrow] 尚未设置为 1。在 for 循环中,条件是 i &lt; nrow,所以它在它之前。你需要i &lt;= nrow

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多