2016-08-29 4 views
-2

/Dieser Code ist für das Drehen des Arrays mit n keine Einträge k keine Zeiten und Ausgabe der Array-Elemente bei Indexz q keine Zeiten/mein Problem hier ist, dass es Laufzeitfehler zeigt, warum es so geschieht .Diese Frage ist eigentlich von Hacker-Rang und es ist mit dem Namen der kreisförmigen Array-Rotation implementation Abschnitt in Algorithmen. Es ist etwas falsch in diesem Code.Warum zeigt es Laufzeitfehler an? Gibt es keine Ausgabe?

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() { 

    int n,k,q; 
    int a[n]; 
    scanf("%d%d%d",&n,&k,&q); 
    for(int i=0;i<n;i++) 
     scanf("%d",&a[i]); 
    for(int j=0;j<k;j++)/*this is for rotating the array*/ 
    { 
     int y=a[n-1]; 
     for(int x=n-2;x>=0;x--) 
      a[x+1]=a[x]; 
     a[0]=y; 
    } 
    for(int b=0;b<q;b++) 
    { 
     int z; 
     scanf("%d",&z); 
     printf("%d\n",a[z]); 
    } 
    return 0; 
} 
+2

"ist es etwas falsch in diesem Code" - ja. –

+0

'int a [n];' - Können Sie sagen, wie groß das Array wäre? –

+0

Bitte formatieren Sie Ihren Code zur besseren Lesbarkeit. – zhon

Antwort

3

Problem:

int n,k,q; 
int a[n]; 

Sie sind eine Reihe von Größe zu schaffen n, bevor der Wert von n Einstellung.

Verwendung:

int n,k,q; 

// Read a value into n first 
if (scanf("%d%d%d",&n,&k,&q) != 3) 
{ 
    // Deal with error 
    return 1; 
} 

// Then define the array. 
int a[n]; 
+0

Ist es zulässig, eine Variable als Größe eines Arrays zu verwenden? – hymie

+0

@hymie, Ja. Arrays mit variabler Länge gehören seit C99 zum Standard. –

+0

Danke. Ich habe C schon viele Jahre zuvor gelernt und nicht mit den sich ändernden Standards Schritt gehalten. – hymie

Verwandte Themen