2016-07-11 11 views
0

Ich bin neu in C und habe einen Code geschrieben, wo ich "?" auf dem Bildschirm, wo es mit dem Wert in einem Array übereinstimmt. Wenn ich ein Array initialisiert habe mit index_location [6] = {0, 1, 5, 8, 9, 12}; Meine erwartete Leistung ist unten aufgeführt. Jede Hilfe oder Hilfe, die mir hilft, wird sehr geschätzt.Code zeigt die Ausgabe nicht richtig an

Ausgabe: ?? @@@? @@ ?? @@?

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

// 
int main(void) 
{ 
    int index_location[6] = {0, 1, 5, 8, 9, 12}; 
    int len=sizeof(index_location)/sizeof(int); 

    for (int a = 0; a < len; a++) 
    { 
     for(int b = 0; b < len; b++) 
     { 
      if (a == index_location[b]) 
      { 
       printf("%c",'?'); 
      } else { 
       printf("%c",'@'); 
      } 
     } 
    } 
    printf("\n"); 
} 
+1

Sie sollten sich wirklich zeigen, was Sie tatsächlich bekommen. Ich vermute, dass es viel mehr Daten als Ihre erwartete Ausgabe ist. Sind Sie sicher, dass die Doppelschleife benötigt wird? Sie sollten eine einzelne Schleife verwenden, denke ich. In C müssen Sie 'for (int a = 0; a

+0

Sollte es nicht printf ('?') Nach Ihren Anforderungen sein –

+0

Array-Grenzen sind aus 'für (a = 0; a evaitl

Antwort

3

Sie benötigen nur eine einzige Schleife. Sie müssen die Indexpositionen 0..12 einschließlich (wobei 12 der letzte Eintrag im index_location Array ist) durchlaufen und prüfen, ob Sie jedes Mal ein ? oder @ drucken müssen. Wenn Sie das Zeichen, das einem der index_location Einträge entspricht, gedruckt haben, müssen Sie mit dem Blick auf den nächsten fortfahren. Sie könnten eine freie Sammlung von assert() Aufrufen hinzufügen, um sicherzustellen, dass die Dinge unter Kontrolle sind, aber solange das Array in sortierter Reihenfolge ist, sollten Sie OK sein (und Sie könnten damit durchkommen, auch wenn es nicht ist, obwohl Sie einige vermissen könnten angefordert ? Marken).

#include <stdio.h> 

int main(void) 
{ 
    int index_location[6] = {0, 1, 5, 8, 9, 12}; 
    int len = sizeof(index_location)/sizeof(index_location[0]); 
    int max = index_location[len - 1]; 
    int idx = 0; 

    for (int a = 0; a <= max; a++) 
    { 
     if (a < index_location[idx]) 
      putchar('@'); 
     else 
     { 
      putchar('?'); 
      idx++; 
     } 
    } 
    putchar('\n'); 
    return 0; 
} 

Ausgang:

[email protected]@@[email protected]@[email protected]@? 
+0

Danke für die Erklärung. – user3221699

0

Der Fehler liegt in der for-Schleifen. Ich würde mit der folgenden Lösung gehen.
Wenn das Array index_location [] in aufsteigender Reihenfolge sortiert ist, diese intead mit Doppel Initialisierung für Schleife verwenden:

int max = index_location[len-1]; 
for(int i = 0,j = 0; i <= max; i++) 
{ 
    if (i == index_location[j]) 
    { 
     printf("%c",'?'); 
     j++; 
    } 
    else { 
     printf("%c",'@'); 
    } 
} 
Verwandte Themen