簡體   English   中英

關於C循環的問題

[英]Question regarding C loops

我不完全確定為什么這沒有返回應有的結果,也許你們中的一個可以幫助我。 我在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;
}

謝謝! 阿米特

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

無效,因為dat的第nrow個元素不存在。

您確定要從零開始以“ k”開頭嗎?

在您發布的樣本中,您使用的不是l-是錯字嗎?

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

那應該工作。

兩件事情:

我假設l.0是類型,而您的l實際上是1。

其次,為什么在for循環中使用k而不是i? 嘗試使用此代替:

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

這都不起作用,說明您的編譯器/硬件已錯誤。

k = 0;

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

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

當您printf("%d", dat[nrow])dat[nrow]尚未設置為1。在for循環中,條件是i < nrow所以它在它之前。 你需要i <= nrow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM