2017-09-06 5 views
-2
printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;); 
plaintextkeywordstring 데이터 유형 ( char *)로되어

을는 char 전환율 C를 count는 INT이며 keywordLengthstrlen(keyword)의 리턴 값이다. 정수 형식 지정자를 사용하면 정수가 인쇄됩니다. 그러나 문자로 인쇄하고 싶지만 문자 형식 지정자를 사용할 때는 아무 것도 인쇄하지 않습니다. 이유가 확실하지 않습니다. 내 예를 들어암시 INT는

는 다음 해당 :

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

** 힌트 : **에서 [ASCII 테이블]의 첫 번째'26' (0-25) 문자는 무엇인가 (

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

는 pedantically 부정적인 sum 처리하려면 높은 호환성을 https://simple.wikipedia.org/wiki/ASCII)? –

+3

당신이 볼 수없는 것은 인쇄되고있는 것이 반드시 인쇄되고 있다는 것을 의미하지는 않습니다. – ForceBru

+0

ForceBru가 말한 내용. 형식 지정자를 텍스트로 묶는 경우 일반적으로 이와 같은 경우에 더 나은 정보를 얻을 수 있습니다. 'printf ("f % cf", ...);'(단지 당신에게 무엇인가가 인쇄되고 있음을 알리기 위해) –

답변

2

코드와 제어 문자를 인쇄 :

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

코드가 확실히 제어 문자를 인쇄 할 때, 편지를 인쇄 printf("%c", 0);에 의존 - 보이지 않을 수도 있습니다.

미묘한 참고 : 부호는 음수가 아닌 값만 포함하려면 plaintext[i], keyword[]에 의존합니다. plaintext[i] + keyword[(count % keywordLength)]의 합이 0보다 작 으면 sum % 26도 음수가됩니다.

[A-Z]에 ASCII 값을 인쇄하려면 'A' 또는 'a'@lurker을 추가하십시오.

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]);