2012-10-19 1 views
0

Cela peut sembler une solution très simple à certaines personnes, mais j'ai essayé de le comprendre depuis un moment maintenant et de m'embêter. J'ai des difficultés à trouver la solution math n'a jamais été un point fort de la mienne. la valeur de char c doit être égale à 79 à la fin de tout si p[i]=72 or 'H' et s2[i]=5. Cette opération fonctionne à merveille, mais j'essaie de comprendre ce qui se passe donc j'ai essayé de le faire avec une calculatrice normale et de continuer à trouver la mauvaise réponse. Si quelqu'un pouvait me décrire exactement l'ordre des opérations et quelles seraient les valeurs, je l'apprécierais. Voici le code source complet que je l'ai jusqu'à présent qui fonctionne:Problème d'opération mathématique

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

} 

La façon dont je fais cette opération est:

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 

Je sais évidemment mes maths est éteint, mais je pensais que je faisais il est juste quand je lance l'opération à travers le débogueur sum = 14 et char c = 79 or 'O' comme il se doit.

+0

Donc, vous dites que votre code fonctionne parfaitement, mais vous ne pouvez pas faire fonctionner votre calculatrice? –

+1

Pourriez-vous résumer ce que vous cherchez à faire avec ce calcul? – John

+0

Ma compréhension de la question est que le code fonctionne bien, mais le PO essayait de réexécuter le calcul à la main afin de comprendre comment cela fonctionne. –

Répondre

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

Votre malentendu est ici.

Qu'est-ce que le code fait

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

signifie

(char_from_s2 - 'A') 

char_from_s2 est le personnage s2 à l'index i % keyLen, à savoir le caractère à la position i enroulé autour de la forme dans la longueur de la chaîne.

Ce que votre calcul montre

Votre calcul fait quelque chose de différent:

(char_from_p % keyLen) - 'A' 

Vous prenez le personnage de p au lieu de partir s2, et l'application de l'opérateur % à la valeur de caractère au lieu de l'index.

+0

Merci beaucoup c'est parfait – Yamaha32088

Questions connexes