2016-07-10 12 views
1

Ich versuche ein einfaches Programm zu erstellen, wo der Benutzer eine Reihe von Zahlen eingeben muss und das Programm das Quadrat und den Würfel des gegebenen ausgeben soll Nummer. Wenn ich jedoch versuche, ein Array zu verwenden, druckt es einige Zufallszahlen, die ich noch nicht eingegeben habe. Jede Hilfe würde geschätzt werden, um die unnötige Eingabe zu beseitigen. Vielen Dank.Zusätzliche Werte beim Drucken eines Arrays (Konvertierung von% s in% c)

#include <stdio.h> 
int main() 
{ 
    char *value; 
    value = malloc(sizeof(20)); 
    float answer; 
    int x; 
    int y; 

    scanf("%s" , value); 

    for(x=0; x < 20; x++) 
    { 
     y = value[x] - '0'; 
     printf("\nThe square of %d is: %d" , y , y*y); 
     printf("\nThe cube of %d is: %d \n" , y , y*y*y); 
    } 

    return 0; 
} 

Antwort

0

Der Ausdruck sizeof(20) gibt die Größe eines int (wörtlichen 20 ist ein int), die typischerweise nur 4 Bytes ist. Mit anderen Worten, Sie ordnen nur eine einzelne Ganzzahl für Ihr Array zu. Alle Zugriffe außerhalb dieser einzelnen Ganzzahl ergeben undefiniertes Verhalten.

Sie müssen sizeof(int) mal die Anzahl der Elemente zuweisen, wenn Sie den Speicher dynamisch zuordnen möchten. Oder (was ich empfehle) verwenden, um ein normales Array:

int value[20]; 

Es gibt auch ein anderes Problem ist, dass Sie nur einen einzigen Wert vom Benutzer gelesen. Sie sollten wahrscheinlich auch in der Schleife lesen.

Aber wenn Sie in der Schleife lesen, dann ist es wirklich nicht notwendig, auch nur ein Array zu haben, nur eine einzige int Variable, die Sie lesen, und dann drucken Sie ihren Wert als Quadrat und gewürfelt.

So könnte der Code als

#include <stdio.h> 

int main(void) 
{ 
    int value; 
    for (unsigned i = 0; i < 20 && scanf("%d", &value) == 1; ++i) 
    { 
     printf("The square of %d is: %d\n", value, value * value); 
     printf("The cube of %d is: %d\n", value, value * value * value); 
    } 

    return 0; 
} 

vereinfacht werden Sie müssen auch vorsichtig sein, wenn überläuft multipliziert wird.

0

Sie nehmen Eingaben in char und arithmetische Operationen darauf.

Verwenden Sie diesen Code, es wird Ihnen korrekte Ausgabe geben.

#include <stdio.h> 
int main() 
{ 
    int *value; 
    value = (int *)malloc(20 * sizeof(int)); 
    //float answer; 
    int x; 
    int y; 
    for(x=0; x < 20; x++) 
    { 
     scanf("%d" , value + i); 
    } 

    for(x=0; x < 20; x++) 
    { 
     y = value[x]; 
     printf("\nThe square of %d is: %d" , y , y*y); 
     printf("\nThe cube of %d is: %d \n" , y , y*y*y); 
    } 

    return 0; 
} 
0

Das Problem ist, mit Ihrer malloc Aussage.
sizeof wird verwendet, um die Parametergröße zu bestimmen - in Ihrem Fall eine hartcodierte Ganzzahl. Das generierte Array hat die Größe 4, also genau sizeof(20) anstelle von 20 ganzen Zahlen, also 20*sizeof(int). Es ist am besten, das Array statisch zuzuordnen, wenn Sie wissen, welche Größe Sie benötigen, siehe folgenden Code:

#include <stdio.h> 
int main() 
{ 
    // This line sets value to an array of 20 ints 
    int value[20]; 
    // Another, less favorable option, but still works: 
    // char *value = malloc(20 * sizeof(int)) 
    float answer; 
    int x; 
    int y; 

    scanf("%s" , value); 

    for(x=0; x < 20; x++) 
    { 
     y = value[x] - '0'; 
     printf("\nThe square of %d is: %d" , y , y*y); 
     printf("\nThe cube of %d is: %d \n" , y , y*y*y); 
    } 

    return 0; 
}