2016-04-04 8 views
1

私は比較的簡単な問題があります。ユーザーがプログラムを実行し、30文字以下のメッセージを入力すると、メッセージの個々の文字の大文字小文字が切り替わります(小文字は小文字になり、小文字は小文字になります)。ケースを変更する部分を除いてすべてが問題ありません。私は、配列のcharへのポインタを使用して、それを関数の引数としてtoggle_caseに渡すことになっています。これを達成する方法について私を助けてください。 ここにコードがあります。cで配列要素ポインタを渡す

#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

あなたの難しさは何ですか?コードがコンパイルされていない、クラッシュしている、出力が間違っていますか?それを明確に説明して、何を手助けすべきかを知ることができます。 'toggle_case'の元の文字に結果を保存していないように見えます。それが問題ならば、結果を 'toggle_case'の中に代入するか、呼び出し側が代入するための結果を返します。 – kaylum

+0

'message_size'はまったく使用されていないようです... – dreamlax

答えて

1

tolowertoupper新しい文字を返す、あなたが更新している場所に戻って割り当てる必要があります。

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

ところで、文字が最初の文字かどうかを確認する必要はありません。 tolowertoupperは、文字が文字でない場合はそのまま文字を返します。

+0

おかげで、このような馬鹿げたミス。 –

関連する問題