2017-07-10 6 views
2
#include <stdio.h> 

char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; 

int main() 
{ 
    int i, c; 
    while ((c = getchar()) != EOF) { 
     for (i = 1; s[i] && s[i] != c; i++); 
     if (s[i]) putchar(s[i-1]); 
     else putchar(c); 
     /* code */ 
    } 
    return 0; 
} 

Was bedeutet die Bedingung s[i] && s[i] != c; innerhalb der for-Schleife bedeuten?
Ich habe es vorher nicht gesehen. Danke!Was bedeutet diese Bedingung (s [i] && s [i]! = C)?

+0

s Array und i ist der Index :) –

Antwort

5

Zuerst ist die Variable s ein nullterminierter C-string, ein Array von Zeichen mit dem letzten Zeichen '\0'. Sie greifen auf dieses Array mit dem Index i in Ihrem Code zu.
Mit dieser For-Schleife durchlaufen Sie die s Zeichenfolge, bis ein Null-Terminator '\0' oder das Zeichen c gefunden wird. Der Nullterminator '\0' ist 0 dezimal, was in der booleschen Logik "false" bedeutet, weil alles andere als 0 wahr ist.

Wenn Sie schreiben zum Beispiel:

char a = 'A'; /* same as char a = 65; */ 
if (a) { ... }; /* same as if (a != 0) */ 

das bedeutet: if a is true das ist: if a is not false und besser: if a is not equal to 0. Diese Erklärung wird als wahr ausgewertet, weil 'A' 65 dezimal (ASCII code), die nicht gleich 0.

Die for-Schleife Sie können gefragt haben neu geschrieben werden als:

for (i = 1; s[i] != '\0' && s[i] != c; i++); 

Ich würde zu verwenden, empfehlen explizite Anweisungen wie s[i] != '\0', weil es einfacher zu lesen ist.

-3

s [i] in ob wird geprüft, ob auf s [i] ein Element existiert. Wenn Element auf s [i] existiert, dann ist es truthy, wenn nicht, dann ist es falsch.

c wird mit Benutzereingaben in intialized while-Schleife

c = getchar() 



s[i] != c // it means that my inputted value can not be equal to s[i]. 
+0

Ihre Antwort enthält zwei falsche Aussagen: Erstens, wenn ein Zeichen 'c' zugeordnet ist, der Wert ''\ 0'', also das Nullzeichen, dann würde' if (c) 'false zurückgeben, und' c' würde' existieren '(es ist nur' null '). Zweitens scheint mir, dass der Versuch, auf ein nicht existierendes Element in C zuzugreifen, wie Out-of-Bounds, zu undefiniertem Verhalten führt. Die meiste Zeit würde das Programm falsch zurückgeben, aber es ist immer noch UB und wird daher niemals als zuverlässig angesehen. –

Verwandte Themen