2016-09-05 1 views
-1

Dans la première boucle for j'essaie d'ajouter un décalage à un tableau char et je ne suis pas capable de le faire. J'ai aussi voulu une entrée du terminal donc j'ai écrit du code qui est un ** à argv [2] et ai utilisé atoi() pour convertir un caractère de argv [1] en un int.Je ne peux pas ajouter de décalage à un tableau char, et ma méthode de réception des chaînes et des entiers à partir de la ligne de commande est-elle optimale?

int main(int argc, char *argv[]) { 

    if(argc != 3) { 
     printf("Enter an integer followed by a string \n\n"); 
     return 1; 
    } 

int i; 
int offset = atoi(argv[1]); 
char **p_message; 
p_message = &argv[2]; 
char encrypt[strlen(*p_message)]; 

printf("You Entered: %d, %s \n", offset, *p_message); 

for(i = 0; i < strlen(*p_message); i++) 
    { 
     encrypt[i] = ((*p_message[i] + offset) % 26); 
    } 

for(i = 0; i < strlen(*p_message); i++) 
{ 
    printf("%c", encrypt[i]); 
} 


return 0; 

} 

Répondre

0

Le problème principal est que vous n'effectuez pas d'ajustement alphabétique avant et après le fonctionnement du module. J'ai ajouté la variable letter comme int pour que l'arithmétique ne déborde pas.

Vous pourriez simplifier le programme en supprimant l'une des étoiles pour **p_message. En outre, vous devez normalement allouer un tableau 1 plus long que la chaîne, pour permettre un nul terminateur, mais ici, vous ne traitez pas le tableau char comme une chaîne, donc pas besoin.

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

int main(int argc, char *argv[]) { 

    if(argc != 3) { 
     printf("Enter an integer followed by a string \n\n"); 
     return 1; 
    } 

    int i; 
    int offset = atoi(argv[1]); 
    char *p_message;          // remove a * 
    p_message = argv[2];         // remove & 
    char encrypt[strlen(p_message)];      // remove * 
    int letter;            // added 

    printf("You Entered: %d, %s \n", offset, p_message); // remove * 

    for(i = 0; i < strlen(p_message); i++) {    // remove * 
     letter = p_message[i];        // remove * 
     if(letter >= 'a' && letter <= 'z') {    // if lower case 
      letter = 'a' + ((letter - 'a') + offset) % 26; 
     } 
     else if(letter >= 'A' && letter <= 'Z') {   // if upper case 
      letter = 'A' + ((letter - 'A') + offset) % 26; 
     } 
     encrypt[i] = letter; 
    } 

    for(i = 0; i < strlen(p_message); i++) {    // remove * 
     printf("%c", encrypt[i]); 
    } 

return 0; 
} 
+0

Merci, j'apprécie – Nomad343

+0

S'il vous plaît montrer votre appréciation avec un vote, merci! –