2017-06-30 3 views
0

Angenommen, ich habe (in meinen Augen nicht als Code) eine Statussache mit einem Integer-Array der Größe n verknüpft.

int array[n] = {0,0,1,0,1,0,1,0,1,.......}. (nur 0 und 1 in diesem Array)

Status '0' bedeutet 'gesperrt' in meinem Kontext. In ähnlicher Weise bedeutet "1" "freigeschaltet". Ich will das jedes Mal, ich drucke die Variable, z. int array[3], ich möchte seinen Status als String und nicht den tatsächlichen Wert der Variablen ausgeben.Wie wird ein Variablenwert einer angegebenen Zeichenfolge zugeordnet?

Wie mache ich das? Gibt es eine Möglichkeit, ich kann 0 mit "locked" und 1 mit "entriegelt" ersetzen?

P.S. - Ich möchte kein weiteres Array mit dem Datentyp string erstellen oder einfach eine if-else-Gleichung einfügen. Hilfe mit Makros wird sehr geschätzt.

+1

'puts ((char * [2]) { "verriegelt", "entriegelt"} [!! array [3]]);' ist ein Start einer using _compound literal_. – chux

+3

'puts (" entriegelt "+ 2 *! Array [3]);' –

+0

'#define show_lock (b) ((b)?" Entriegelt ":" locked ")' und dann show_lock ausgeben (array [n]) mit 'printf()', 'fputs()' oder was immer du bevorzugst. –

Antwort

0

Ist das eine Aufgabe, die nicht gut verstanden wird?

Ich denke, der Kommentar von Mike Housky ist richtig. Aber lassen Sie mich noch einige "Makros" hinzufügen, vielleicht wird diese Antwort nach unten verschoben.

#define LOCKED 0 
#define UNLOCKED 1 
#define PRINT(x) (x == LOCKED) ? printf("locked") : printf("unlocked") 

Verwendung als

int array[n] = {0,0,1,0,1,0,1,0,1,.......} 
or 
int array[n] = {LOCKED,UNLOCKED,LOCKED,.......} 

PRINT(array[3]); 
+0

keine Zuordnung. Art von einem Teil des Projekts. viel tnx :) – sancz

1

Sicher, Sie können String-Literale verwenden und entscheiden, welche basierend auf dem Wert des Array-Steckplatzes zu verwenden.

for (int i = 0; i < n; i++) { 
    const char *is_locked = (array[i] == 0) ? "locked" : "unlocked"; 
    printf("status of %d: %s\n", i, is_locked); 
} 
+0

wird funktionieren, kein Zweifel. Aber in meinem Code ist es unnötig konditioniert, dass ich diese Variable (0 oder 1) drucken muss. Ich sollte seinen Status nicht drucken. Gibt es eine Möglichkeit, 0 oder 1 durch gesperrt oder entriegelt zu ersetzen. (MACROS?) – sancz

+2

Ja, Sie können ein Makro verwenden. Aber die Regeln, die deine Einschränkung beschreiben, sind unklar. "Es ist unnötig konditioniert, dass ich diese Variable (0 oder 1) drucken muss" - was bedeutet das? Ich kann den Anrufer nicht ändern, er ruft "print_this_val (array [n])" auf? Sie könnten immer noch die Definition von 'print_this_val' ändern. Was ist die wirkliche Einschränkung? –

+0

Wie definiert er Makro, wenn er '#define 0" locked "' definiert, ersetzt er keine Nullen bei der Zustandsprüfung –

Verwandte Themen