2012-10-19 64 views
0

这对于一些人来说可能看起来像一个非常简单的解决方案,但我一直试图弄清楚它现在的一段时间,它让我烦恼。数学运算问题

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
char c = 'A' + sum%26; 

我有麻烦提出的解决方案数学从来就不是我的强项。如果p[i]=72 or 'H's2[i]=5char c的值应该等于79的结尾。 这个操作奇妙地工作,但我试图理解发生了什么,所以我试图用普通的计算器来做这件事,并继续提出错误的答案。如果有人能够引导我完成操作的顺序和价值将是我会感激。这里是我到目前为止,工程完整的源代码:

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

int main(int argc, char *argv[]) 
{ 
    char s2[25]; 
    strcpy(s2, argv[1]); 
    int keyLen = strlen(s2); 
    printf("Please enter a string of text to be encrypted!\n"); 
    string p = GetString(); 
    for (int i = 0, n = strlen(p); i < n; i++) 
    { 
     if (isupper(p[i])){ 
     int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
     char c = 'A' + sum%26; 
     printf("%c", c); 
     } 
    } 
    printf("\n"); 
    printf("%d\n", keyLen); 

} 

我在做此操作的方法是:

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
//int sum = (72-65) + (72 % 5) - 65) sum= -56 
char c = 'A' + sum%26; 
//char c = 65 + -56 %26 char c = -8 

我明明知道我的数学是关闭的,但我认为我所做的一切它正确时,我通过调试器sum = 14char c = 79 or 'O'运行该操作应该像它应该。

+0

所以你说你的代码工作完美,但你不能让你的计算器工作? –

+1

你能总结一下你计划做什么? – John

+0

我对这个问题的理解是,代码工作正常,但OP正试图手动重新运行计算,以了解它是如何工作的。 –

回答

3
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
//int sum = (72-65) + (72 % 5) - 65) sum= -56 

你的误解就在这里。

什么代码的作用

(s2[i % keyLen] - 'A') 

装置

(char_from_s2 - 'A') 

其中char_from_s2是在索引i % keyLens2字符,即,在i位置的字符缠绕,以适应长度的字符串。

你的计算表​​明

你的计算做一些不同的东西:

(char_from_p % keyLen) - 'A' 

你把从p而不是从s2字符,并应用%运营商的字符值而不是索引。

+0

非常感谢你的完美 – Yamaha32088