2017-07-01 1 views
0

Ich habe an meinen Programmierkenntnissen gearbeitet, und ich habe meine Reise hier begonnen. Da stecke ich an einem Ort fest und versuche herauszufinden, wo ich falsch liege. Der Code lautet wie folgt:Druckelemente eines Arrays bis zum in C programmierten Schlüssel

#include<stdio.h> 
int main(){ 
    int a[10],i,j,arr_size; 

    printf("Enter the size of the array"); 
    scanf("%d",&arr_size); 

    printf("Enter the array:"); 
    for(i=0;i<arr_size;i++) 
    scanf("%d",&a[i]); 

    //here key is 42 
    //so we'll find the key and print the elements up to that 
    for(j=0;j<arr_size;j++){ 
     if(j==42) 
     break; 

     //loop for the array up to the key 
     for(i=0;i<j;i++) 
     printf(" %d",a[i]); 
    } 

    return 0; 
} 

Der Ausgang kam, war: The output of the above code

Die Ausgabe zeigt, dass die Schleife auf den Schlüssel steigen wird, dh 42 druckt aber in vielfältiger Weise 1 1 2 1 2 42. Das ist jetzt seltsam.

Die erforderliche Ausgabe im Format vorliegen: 1 2 nur, wenn der Eingang gegeben 1 2 42 33

+1

Sie scheinen den Array-Index gegen 42 zu testen in Ort des Wertes. – doynax

+0

Erfahren Sie, wie Sie einen * Debugger * verwenden. Dann können Sie den Code Zeile für Zeile durchgehen, um zu sehen, was der Fehler sein könnte. –

+0

Danke @doynax, da ich in meinem Code Änderungen vorgenommen habe und dies 'if (a [j] == 42) anstelle von if (j == 42) getan habe und dann abgebrochen habe; _und die Schleife geht wie folgt für (i = 0; i Alok

Antwort

1

Sie das Array nicht überprüfen Werte für 42, Sie überprüfen den Index.

Der Grund, warum Ihre Schleife druckt, was sie jetzt druckt, ist, weil die verschachtelte Schleifen. Sie drucken das Array mehrfach (teilweise).

Anstelle der verschachtelten Schleife, könnten Sie etwas Einfaches wie

for (int j = 0; j < arr_size && a[j] != 42; ++j) 
{ 
    printf(" %d", a[j]); 
} 

tun empfehle ich Ihnen auch einen Scheck hinzufügen, um sicherzustellen, dass arr_size ist nicht außerhalb der Grenzen für Ihr Array.

+0

@Ajay Sollte es nicht? – GoodDeeds

+0

@Some Programmierer dude, dein Code ist sehr effizient, aber ich möchte eine einfache Frage stellen, obwohl ich nicht viel darüber weiß. ** Da Leute j ++ im Code benutzt haben, um zu inkrementieren, wie funktioniert ++ j in einer Schleife. ** Ich wäre dankbar, wenn Sie ein paar Details dazu angeben würden. – Alok

+1

@AlokKumar Das Endergebnis von 'j ++' gegenüber '++ j' ist das gleiche, aber' j ++ 'muss den * alten * Wert von' j' zurückgeben, was bedeutet, dass es mehr Operationen und möglicherweise eine temporäre (Compiler-) generierte) Variable. In diesem speziellen Fall, in dem das Ergebnis ignoriert wird, sollte ein guter Compiler beide gleichzeitig optimieren können. "++ j" zu verwenden ist nur eine Gewohnheit, die ich habe. –

1

Die Halterung war verlegt worden. Das, was Sie suchen:

#include<stdio.h> 
int main(){ 
    int a[10],i,j,arr_size; 

    printf("Enter the size of the array"); 
    scanf("%d",&arr_size); 

    printf("Enter the array:"); 
    for(i=0;i<arr_size;i++) 
    scanf("%d",&a[i]); 

    //here key is 42 
    //so we'll find the key and print the elements up to that 
    for(j=0;j<arr_size;j++){ 
     if(a[j]==42) 
      break; 
    } 
    //loop for the array up to the key 
    for(i=0;i<j;i++) 
    printf(" %d",a[i]); 


    return 0; 
} 
+0

Danke @ Arvindsinc2, es hat funktioniert !! – Alok

5

die Sie interessieren ..

#include<stdio.h> 
int main(){ 
    int a[10],i,j,arr_size; 

    printf("Enter the size of the array"); 
    scanf("%d",&arr_size); 

    printf("Enter the array:"); 
    for(i=0;i<arr_size;i++) 
    scanf("%d",&a[i]); 

    //here key is 42 
    //so we'll find the key and print the elements up to that 
    for(j=0;j<arr_size;j++){ 
     if(a[j]==42) 
      break; 
    } 
    //loop for the array up to the key 
    for(i=0;i<j;i++) 
    printf(" %d",a[i]); 


    return 0; 
} 

dieser Code wird die requied Ausgang geben .. 1 2

+0

Danke @Nithin. Es funktionierte!! – Alok

Verwandte Themen