функция toupper не работает с разыменованием указателя?

#c

#c

Вопрос:

Я пишу программу, которая определяет, является ли ввод белым или сладким хлебом, и я передаю значение, определяющее тип хлеба, функции в качестве указателя:

 #include <ctype.h>

void WhiteSweetChoosing(char *orWhiteSweet);

int main(){

    char orWhiteSweet ,isDouble, isManual;
    WhiteSweetChoosing(amp;orWhiteSweet);
    printf("%c", orWhiteSweet);

    return 0;
}

void WhiteSweetChoosing(char *orWhiteSweet){
    printf("Please enter your bread typen");
    printf("W for white and S for sweet:");
    scanf(" %c", orWhiteSweet);
    *orWhiteSweet = toupper(*orWhiteSweet);

    while(*orWhiteSweet != 'S' amp;amp; *orWhiteSweet != 'W'){
        printf("Please enter valid charactern");
        printf("W for white and S for sweet:");
        scanf(" %c", orWhiteSweet);
    }

}
 

Однако это не работает, поскольку функция toupper, похоже, не присваивает новое значение разыменованному указателю. Я поместил один printf под функцию, чтобы убедиться, что toupper не работает.

Но когда я присваиваю значение новой переменной вместо самого старого разыменованного указателя, он начал работать:

 void WhiteSweetChoosing(char *orWhiteSweet){
    printf("Please enter your bread typen");
    printf("W for white and S for sweet:");
    scanf(" %c", orWhiteSweet);
    char WorS = toupper(*orWhiteSweet);

    while(WorS != 'S' amp;amp; WorS != 'W'){
        printf("Please enter valid charactern");
        printf("W for white and S for sweet:");
        scanf(" %c", orWhiteSweet);
        WorS = toupper(*orWhiteSweet);
    }

}
 

Я был бы признателен, если бы кто-нибудь был достаточно любезен, чтобы объяснить, почему, спасибо

Ответ №1:

Вы забываете применять toupper для значений, считываемых секундой или позже scanf() .

 void WhiteSweetChoosing(char *orWhiteSweet){
    printf("Please enter your bread typen");
    printf("W for white and S for sweet:");
    scanf(" %c", orWhiteSweet);
    *orWhiteSweet = toupper(*orWhiteSweet);

    while(*orWhiteSweet != 'S' amp;amp; *orWhiteSweet != 'W'){
        printf("Please enter valid charactern");
        printf("W for white and S for sweet:");
        scanf(" %c", orWhiteSweet);
        *orWhiteSweet = toupper(*orWhiteSweet); /* add this */
    }

}
 

Комментарии:

1. Спасибо! Я не заметил такой очевидной ошибки