Вопрос по поводу петель C - PullRequest
       3

Вопрос по поводу петель C

1 голос
/ 22 января 2011

Я не совсем уверен, почему это не возвращает того, что должно быть, возможно, один из вас мог бы помочь мне. У меня есть следующее для цикла в C:

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;
}

Спасибо! Amit

Ответы [ 6 ]

4 голосов
/ 22 января 2011
printf("%d", dat[nrow]);

недопустимо, поскольку n-й элемент dat не существует.

1 голос
/ 22 января 2011

Вы уверены, что начинаете 'k' с нуля?

В примере, который вы разместили, вы используете l, а не 1 - это просто опечатка?

0 голосов
/ 22 января 2011

когда вы printf("%d", dat[nrow]), dat[nrow] не были установлены на 1. В цикле for условие равно i < nrow, поэтому оно перед ним. Вам нужно i <= nrow.

0 голосов
/ 22 января 2011

Либо это работает, ваш компилятор / аппаратное обеспечение прослушивается.

k = 0;

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

printf("%d, %d", dat[0], dat[nrow - 1]);
0 голосов
/ 22 января 2011

Две вещи:

Я предполагаю, что l.0 является типом, а ваш l фактически равен 1.

Во-вторых, почему вы используете k в цикле for вместоиспользуя я?Попробуйте использовать это вместо:

for (i=0; i<nrow; i++) {
    dat[i]=1.0;
}
0 голосов
/ 22 января 2011
for (i=0; i<nrow; i++) {
    dat[k]=1.0;
    k++;
}

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...