#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. Спасибо! Я не заметил такой очевидной ошибки