2017-09-06 2 views
-2
printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;); 

Wo plaintext und keyword sind der string Datentyp (char *) verkohlen Umwandlung count ist ein int und keywordLength ist der zurückgegebene Wert von strlen(keyword). Wenn ich den Ganzzahlformatbezeichner verwende, werden Ganzzahlen gedruckt. Ich möchte jedoch, dass es als Buchstaben gedruckt wird, aber es druckt nichts, wenn ich den Zeichenformatspezifizierer verwende. Ich bin mir nicht sicher warum.C nicht implizit int

Für mein Beispiel sind die folgenden Bedingungen erfüllt:

char * plaintext = "hello"; 
char * keyword = "abc"; 
+6

** Hinweis: ** was sind die ersten '26' (0-25) Zeichen der [ASCII-Tabelle] (https://simple.wikipedia.org/wiki/ASCII)? –

+3

Dass Sie nicht sehen können, was gedruckt wird, bedeutet nicht unbedingt, dass nichts gedruckt wird. – ForceBru

+0

Was sagte ForceBru. Im Allgemeinen können Sie in solchen Fällen bessere Informationen erhalten, wenn Sie Ihren Formatbezeichner mit Text umgeben. 'printf (" f% cf ", ...);' (um Sie davon zu überzeugen, dass etwas gedruckt wird) –

Antwort

2

-Code druckt Steuerzeichen mit:

printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26); 

-Code stützt sich auf printf("%c", 0); einen Brief gedruckt wird, wenn es mit Sicherheit ein Steuerzeichen druckt - was möglicherweise nicht sichtbar ist.

Subtiler Hinweis: Code basiert auf plaintext[i], keyword[], um nur nicht negative Werte zu enthalten. Sollte die Summe von plaintext[i] + keyword[(count % keywordLength)] kleiner als 0 sein, wird auch sum % 26 negativ sein.

Um einen ASCII-Wert in [A-Z] zu drucken, fügen Sie 'A' oder 'a'@lurker hinzu.

int sum = plaintext[i] + keyword[(count % keywordLength)]; 
printf("%c", (sum % 26) + 'A'); 

Um pedantisch negative sum handhaben und sehr tragbar zu sein:

int sum = plaintext[i] + keyword[(count % keywordLength)]; 
// mod math, even for negative values 
sum = ((sum % 26) + 26) % 26; 
// Print letter, even when encoding is not ASCII 
printf("%c", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[sum]); 
Verwandte Themen