[英]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.