2016-04-04 28 views
1

Göreceli olarak basit bir sorunum var. Bir kullanıcının programı çalıştırması, 30 karakterlik bir mesaj yazması ve daha sonra mesajların münferit harflerinin deşifre edilmesi gerekir (küçük harfler üst üste gelecek ve tersi). Davanın değiştirilmesinin dışında her şey yolunda. Dizideki bir char işaretçisini kullanmam ve toggle_case işlevine bir işlev argümanı olarak iletmem gerekiyor. Lütfen bunu nasıl yapacağınıza yardımcı olun. İşte kod.dizi öğesi işaretçisini geçirme

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

void read_message(char *message, int *message_size); 
void toggle_case(char *character); 
void count_cv(char* message); 

int main() { 

    char message[30]; 
    int message_size; 

    char *message_pointer; 
    message_pointer = message; 

    read_message(message, &message_size); 
    int i = 0; 
    for(i =0; i<30; i++){ 
     toggle_case(&message_pointer[i]); 
    } 
    printf("New string: %s",message); 
    return 0; 
} 

void read_message(char *message, int *message_size){ 
    printf("Enter your string (maximum 30 characters): "); 
    fgets(message, 30, stdin); 
} 

void toggle_case(char *character){ 
    //check if character is a letter 
    if (isalpha(*character)) { 
    //Check if the character is upper case 
    if(isupper(*character)){ 
     //convert the character to lower case 
     tolower(*character); 
    } else { 
     //Check if the character is lower case 
     //convert the character to upper case 
     toupper(*character); 
    } 
} 
} 

void count_cv(char* message){ 

} 
+0

Zorluğunuz tam olarak nedir? Kod derlenmiyor mu, çöküyor mu, yanlış çıktı mı üretiyor? Açıkça bize açıklayın, böylece size neyle yardımcı olacağımızı bilebiliriz. Görünüşe göre, sonucu "toggle_case" öğesindeki orijinal karaktere geri kaydetmiyorsunuz. Sorununuz buysa, ya "toggle_case" içindeki sonucu atayın ya da arayanın ataması için bir sonuç döndürün. – kaylum

+0

'message_size' hiç kullanılmıyor ... – dreamlax

cevap

1

tolower ve toupper yeni bir karakter dönmek, geri Güncellemekte olduğunuz konuma atamanız gerekir.

if (isupper(*character)) { 
    *character = tolower(*character); 
} else { 
    *character = toupper(*character); 
} 

BTW, karakterin önce bir harf olup olmadığını kontrol etmeniz gerekmez. tolower ve toupper sadece bir harf değilse karakteri değiştirmeden döndürür.

+0

teşekkürler dostum, böyle aptal bir hata. –

İlgili konular