簡體   English   中英

toupper function 不適用於指針取消引用?

[英]toupper function doesn't work with pointer dereference?

我正在編寫一個程序來確定輸入是白面包還是甜面包,並將確定面包類型的值作為指針傳遞給 function:

#include <ctype.h>

void WhiteSweetChoosing(char *orWhiteSweet);

int main(){

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

    return 0;
}

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

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

}

但是,這不起作用,因為 toupper function 似乎沒有將新值分配給取消引用的指針。 我在 function 下放了一個 printf 以驗證 toupper 不起作用。

但是當我將值分配給一個新變量而不是舊的取消引用指針本身時,它開始工作:

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

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

}

如果有人能解釋原因,我將不勝感激,謝謝

您忘記為第二個或以后的scanf()讀取的值應用toupper

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

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM