2016-04-04 17 views
1

Ich habe ein relativ einfaches Problem. Ein Benutzer soll das Programm ausführen, eine Nachricht von 30 Zeichen oder weniger eingeben und dann wird der Fall der einzelnen Buchstaben der Nachrichten umgeschaltet (Kleinbuchstaben werden in Großbuchstaben geschrieben und umgekehrt). Alles ist in Ordnung, außer dass der Fall geändert wird. Ich soll einen Zeiger auf ein Zeichen in einem Array verwenden und es als Funktionsargument an toggle_case übergeben. Bitte helfen Sie mir, wie Sie dies erreichen können. Hier ist der Code.übergeben Array-Element Zeiger in 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

Was genau ist deine Schwierigkeit? Wird der Code nicht kompiliert, stürzt er ab, produziert er die falsche Ausgabe? Erklären Sie es uns, damit wir wissen, was Sie brauchen. Es sieht so aus, als ob Sie das Ergebnis nicht in dem ursprünglichen Zeichen in 'toggle_case' speichern. Wenn das Ihr Problem ist, dann weisen Sie entweder das Ergebnis innerhalb von 'toggle_case' zu oder geben Sie ein Ergebnis zurück, das der Aufrufer zuordnen kann. – kaylum

+0

'message_size' scheint überhaupt nicht verwendet zu werden ... – dreamlax

Antwort

1

tolower und toupper das neue Zeichen zurückgeben, müssen Sie es zurück an den Ort zuweisen Sie aktualisieren.

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

BTW, Sie müssen nicht zuerst überprüfen, ob das Zeichen ein Buchstabe ist. tolower und toupper geben das Zeichen einfach unverändert zurück, wenn es sich nicht um einen Buchstaben handelt.

+0

danke Kumpel, so ein dummer Fehler. –