2017-05-22 6 views
-1

Alors j'écris un programme de chiffrement dans le cadre du cours Harvard CS50 et j'ai ceci code pour vérifier si un caractère + la clé de chiffrement le mettra hors de la plage alphabétique ASCII et pour le boucler si c'est le cas (ainsi que la préservation de la casse). Les types de réseau étant pédalé à travers sont « char » (en texte clair) et « int » (en cipherArray)Obtenir des erreurs de "variable inutilisée" et "identificateur non déclaré" en fonction simple J'essaie d'écrire en C et je ne peux pas comprendre pourquoi

if (((plainText[i] < 91) && ((plainText[i] + cipherArray[j]) > 90)) || ((plainText[i] > 97) && ((plainText[i] + cipherArray[j]) > 122))) 
      { 
       printf("%c", ((plainText[i] + cipherArray[j]) - 26)); 
      } 
      else 
      { 
       printf("%c", (plainText[i] + cipherArray[j])); 
      } 

Cependant, le code ci-dessus est un peu difficile à manier et je suis en train de ranger vers le haut en le remplaçant par un fonction que je l'ai écrit comme ceci:

char codeLetters(char a, int b) 
{ 
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122)) 
    { 
     char c = (a + b) - 26; 
    } 
    else 
    { 
     char c = a + b; 
    } 

    return c; 
} 

L'idée étant alors je pourrais appeler cette fonction avec:

char code = codeLetters(plainText[i], cipherArray[j]); 
      printf("%c", code); 

Cependant quand je tente de compiler je reçois les erreurs suivantes:

vgen1.c: 114: 14: erreur: variable inutilisée 'c' [-Werror, -Wunused-variable] char c = (a + b) - 26; ^ vgen1.c: 118: 14: erreur: variable inutilisée 'c' [-Werror, -Wunused-variable] char c = a + b; Erreur: utilisation de l'identificateur non déclaré 'c' return c;

Quelqu'un pourrait-il me dire où je me trompe? Pour mémoire, j'ai une autre fonction dans ce code qui fonctionne très bien

+0

Pourquoi voudriez-vous écrire 97 au lieu de ' 'a'' –

+0

Vous voudrez peut-être lire sur le ['isalpha'] (https://linux.die.net/man/3/isalpha),' isupper', 'islower', [' toupper'] (https://linux.die.net/man/3/toupper), et les fonctions 'tolower' dans la bibliothèque standard (' ctype.h'). En règle générale, vous ne voulez pas regarder les encodages de caractères bruts, car ils peuvent changer en fonction du système et des paramètres régionaux. –

Répondre

3

Could someone let me know where I am going wrong?

Le problème est que vous déclarez la variable cà l'intérieur vos if déclarations, de sorte que la portée de la variable est juste à l'intérieur if. Par conséquent, la déclaration:

return c; 

ne peut pas être exécuté correctement, car il n'y a pas c défini dans le cadre de la fonction. Changer votre fonction codeLetters à:

char codeLetters(char a, int b) 
{ 
    char c; 
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122)) 
    { 
     c = (a + b) - 26; 
    } 
    else 
    { 
     c = a + b; 
    } 

    return c; 
} 

Voir this question des informations sur la portée des variables.

0

portée de c est limitée dans les blocs où elle est déclarée, il n'est pas visible où il est retourné

char codeLetters(char a, int b) 
{ 
    if (((a < 91) && (a + b) > 90) || ((a > 97) && (a + b) > 122)) 
    { 
     char c = (a + b) - 26; 
    } 
    else 
    { 
     char c = a + b; 
    } 

    return c; // c is not visible here 
}