2016-04-04 2 views
1

У меня возникают проблемы с чтением пользовательских входов с терминала в мой массив.scanf() в 1D массив в C

массив 'a' имеет динамический размер. Полином, который вводится пользователем, определяет размер массива.

После компиляции и запуска:

Enter the order number: 
3 
Enter your constant: 
-90 
Enter coefficient # 0 
8 
Enter coefficient # 1 
4 
Enter coefficient # 2 
35 
Enter coefficient # 3 
54 
    0  8.000000 
    1  4.000000 
    2  0.000000 
    3  0.000000 

На отладочных строк я просто представления массива обратно пользователю. По некоторым причинам он возвращает ноль для второй половины массива. Я не могу понять, в чем проблема. Любая помощь будет принята с благодарностью.

PS. игнорировать функцию eval.

Вот код, я работаю над:

//import required libraries 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

// function prptotype 
double eval(double a[], double x, int n); //n is max degree 
//global variables 
int N = 0;//N is the polynomial order 
double *a;//array 
double x; // constant 
//main function 
int main() 
{ 
    printf("%s\n", "Enter the order number:"); 
    scanf("%d", &N); // user input for the order numbers 
    while (N < 1) //input debuger 
    { 
     printf("%d %s\n%s\n", N,"is NOT a positive and non-zero number", "Enter a positive and non-zero integer:"); 
     scanf("%d", &N); // user input for the order numbers 
    } 
    a = malloc ((N + 1) * sizeof(int));// assigning the array size in respect with user input 
    printf("%s\n", "Enter your constant:"); 
    scanf("%lf", &x);// user input for "x" constant 
    for (int i = 0; i < N + 1; ++i) 
    { 
     printf("Enter coefficient # %d\n", i); 
     scanf ("%lf", &a[i]); 
    } 
    /* Debug */ 
    for (int i = 0; i < N + 1; ++i) 
    { 
     //a[i] = 0; 
     printf("%3d%13lf\n", i, a[i]); 
    } 
} 

//eval function 
double eval(double a[], double x, int n) 
{ 

} 

ответ

2

Первая проблема заключается в следующем -

a = malloc ((N + 1) * sizeof(int)); //you allocate for N+1 integers 

Вы не выделить достаточно памяти (вы должны выделить для N+1double). a - double *, и вы используете sizeof(int). Исправьте его -

a = malloc ((N + 1) * sizeof(double)); 

И вещь для печати double использования %f не %lf (только для scanf) -

printf("%3d%13lf\n", i, a[i]); // -> use %f 
       ^^ 

Примечания - Не забудьте free выделенной памяти. И BTW никакого массива в вашем коде.

+1

Для 'printf','% f' или '% lf' могут быть использованы, нет никакой разницы. – dreamlax

+0

@dreamlax C89 не поддерживает '% lf' в' printf'. –

+0

@CoolGuy: C89 также 27 лет. POSIX, C99 и C11 позволяют это делать. Нет смысла использовать C89, если вам абсолютно не нужно. – dreamlax

Смежные вопросы