[英]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.