2016-04-04 15 views
1

Ich habe Probleme beim Lesen der Benutzereingaben von Terminal in meinem Array.scanf() zu 1D-Array in C

Das Array 'a' hat eine dynamische Größe. Das Polynom, das vom Benutzer eingegeben wird, bestimmt die Größe des Arrays.

einmal kompiliert und ausgeführt:

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 

Auf den Debug-Linien Ich berichte nur das Array zurück zum Benutzer. Aus einigen Gründen gibt es für die zweite Hälfte des Arrays Null zurück. Ich kann nicht herausfinden, was das Problem sein könnte. Jede Hilfe würde sehr geschätzt werden.

PS. Ignoriere die Eval-Funktion.

hier der Code arbeite ich an:

//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) 
{ 

} 

Antwort

2

Das erste Problem ist das -

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

Sie haben nicht genug Speicher reservieren (Sie müssen für N+1double zuzuteilen). a ist ein double * und Sie verwenden sizeof(int). Korrigieren Sie es zu -

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

Und was für den Druck double Verwendung %f nicht %lf (nur für scanf) -

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

Hinweis - Verwenden Sie auf free zugewiesenen Speicher nicht vergessen. Und BTW kein Array in Ihrem Code.

+1

Für 'printf','% f' oder '% lf' kann verwendet werden, es gibt keinen Unterschied. – dreamlax

+0

@dreamlax C89 unterstützt '% lf' in' printf' nicht. –

+0

@CoolGuy: C89 ist auch 27 Jahre alt. POSIX, C99 und C11 erlauben dies alles. Kein Grund, C89 zu benutzen, es sei denn, du musst es unbedingt tun. – dreamlax