c - toupper 函数不适用于指针取消引用?
问题描述
我正在编写一个程序来确定输入是白面包还是甜面包,并将确定面包类型的值作为指针传递给函数:
#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 函数似乎没有将新值分配给取消引用的指针。我在函数下放了一个 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);
}
}
如果有人能解释原因,我将不胜感激,谢谢
解决方案
您忘记申请toupper
秒或更晚读取的值scanf()
。
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 */
}
}
推荐阅读
- reactjs - 如何将默认道具设置为功能组件中所需的道具?
- sql - SQL合并只有一列不同的列
- android - 如何从 android kotlin 应用程序的文件夹中选择所有照片
- php - 会话检查在 Codeigniter PHP 的构造函数中不起作用
- azure - 使用负载均衡器限制对 azure vm 中 tomcat 应用程序的 Internet 访问
- reactjs - 如何在不复制的情况下更改对象状态
- android - 为 RecyclerView 实例化一个通用适配器
- android - 我的 android studio 中的 sdk 更新站点列表为空
- .htaccess - Htaccess ==> 从 url 中删除参数
- python - 如何修复使用 sympy 符号表达式引起的类型错误