2016-04-10 1 views
-1

Bir dize almam, tersine çevirmem gerektiğini ve sonra bir sayı girdiğimi ve her harfin birkaç harfe göre taşınması gerektiğine dair alıştırmalarım var Bu sayıya ve bunların hepsinde işaretçilerle kullanmam gerekiyor. burada benim kodudur:'a' ve 'z' arasında bir kaç harf nasıl hareket ettirilir

#include <stdio.h> 

#define LEN 100 
void decryptText(char* encText, int n); 
int main(void) 
{ 
    char str[LEN] = { 0 }; 
    int num = 0; 
    printf("Please enter a string :\n"); 
    fgets(str, LEN, stdin); 
    printf("\nPlease enter a number:\n"); 
    scanf("%d", &num); 
    decryptText(str, num); 
    getchar(); 
    system("PAUSE"); 
    return 0; 
} 

void decryptText(char* encText, int n) 
{ 
    int i = 0, len = 0 , value = 0 ; 
    char moved = ""; 

    for (i = 0; i<LEN; i++){ 
     if (*encText == '\0') 
     { 
      break; 
     } 
     encText++; 
    } 
    len = i; 
    encText--; 
    printf("The secret message is: \n\n"); 
    for (i = len; i>0; i--) 
    { 
     value = (int*)(encText--); 
     moved = (char)(value + n); 
     *encText = moved; 
     printf("%c", *encText); 
    } 
    printf("\n\n"); 
} 

programı çalışmıyor ve ben hala sadece 'a' ve 'z' arasında harfleri yapmak gerekir ve ben mektup taşımak için işaretçiyi değiştiremezsiniz.

+2

Yığın Taşması'na Hoş Geldiniz! Kodunuzda ilerlemek için bir hata ayıklayıcısını nasıl kullanacağınızı öğrenmeniz gerekebilir gibi geliyor. İyi bir hata ayıklayıcı ile, program satırınızı istediğiniz gibi çalıştırabilir ve beklediğiniz yerden saptırabilirsiniz. Herhangi bir programlama yapacaksanız bu önemli bir araçtır. Daha fazla okuma: [Küçük programlarda hata ayıklama] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+1

Kodunuz hiç mantıklı değil. –

+0

__ * ptr ++ __ işaretçiyi ilerletirken, __ (* ptr) ++ __, içeriği "A" değerini "B" olarak değiştirerek, içeriği artıracaktır. –

cevap

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

#define LEN 100 

void decryptText(char* encText, int n); 

int main(void){ 
    char str[LEN] = { 0 }; 
    int num = 0; 
    printf("Please enter a string :\n"); 
    fgets(str, sizeof(str), stdin); 
    str[strcspn(str, "\n")] = '\0';//remove newline 
    printf("\nPlease enter a number:\n"); 
    scanf("%d", &num); 
    num = num % 26; 
    decryptText(str, num); 
    //getchar(); 
    system("PAUSE"); 
    return 0; 
} 

void decryptText(char* encText, int n){ 
    int i = 0, len = 0 , value = 0 ; 
    unsigned moved = '\0'; 

    for (i = 0; *encText; i++){ 
     ++encText; 
    } 
    len = i; 
    --encText; 

    printf("The secret message is: \n\n"); 
    for (i = len; i>0; i--){ 
     value = *encText; 
     if(isupper(value)) 
      value = tolower(value); 
     if(islower(value)){ 
      moved = value + n; 
      if(moved > 'z') 
       moved = 'a' -1 + moved - 'z'; 
      else if(moved < 'a') 
       moved = 'z' +1 + moved - 'a'; 
      *encText = moved; 
     } 
     printf("%c", *encText--); 
    } 
    printf("\n\n"); 
}