感谢您的关注...我真的很困惑..为什么当我给 char 一个数组时我不能使用 toupper 将 char 类型转换为大写...就像这样“char drh[1]”?
这是我的代码..这段代码还没有完成..我卡在了中间。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
int main()
{
char nama[50], gender[6], drh[1];
int tahun_l, usia;
float berat, tinggi, berat_i;
printf("Masukkan Data Anda\n\n");
// INPUT ZONE
//First
printf("Nama\t\t\t\t: ");
scanf("%[^\n]", &nama);
printf("Tahun Lahir (yyyy)\t\t: ");
scanf("%d", &tahun_l);
printf("Gol Darah (A/B/C)\t\t: ");
scanf("%s", &drh);
system("cls");
//Second
printf("Masukkan Data Anda\n\n");
printf("Nama\t\t\t\t: %s\n", nama);
fflush(stdin);
printf("Tahun Lahir (yyyy)\t\t: %d\n", tahun_l);
fflush(stdin);
printf("Gol Darah (A/B/O)\t\t: %s\n", drh);
drh = toupper(drh); //not working
fflush(stdin);
printf("Jenis Kelamin (Pria/Wanita)\t: ");
scanf("%s", &gender);
printf("Berat Badan (kg)\t\t: ");
scanf("%f", &berat);
printf("Tinggi Badan (cm)\t\t: ");
scanf("%f", &tinggi);
//FORMULA ZONE
usia = 2008 - tahun_l;
berat_i = tinggi - 100 - (0.1 * (tinggi - 100));
//OUTPUT ZONE
printf("\n%s, berdasarkan data yang Anda masukkan,\n", nama);
printf("Anda berjenis kelamin %s, saat ini Anda berusia %d tahun,\n", gender, usia);
printf("Berat badan = %.2f kg, tinggi badan = %.2f cm, golongan darah = %s \n", berat, tinggi, drh);
printf("\nBerat badan ideal adalah %.2f", berat_i);
getche();
return 0;
}
toupper
函数作用于单个字符,而不作用于字符串。如果需要将整个字符串转为大写,需要使用循环:
for (char *p = drh ; *p ; *p = toupper(*p), p++)
;
但是,您的 drh
缓冲区没有足够的长度:它必须有 2 个字符以适应空终止符:
char nama[50], gender[6], drh[2];
// Add 1 char for terminator ^---- HERE
此外,由于您知道 drh
是单个字符,您可以使用
*drh = toupper(*drh);
我是一名优秀的程序员,十分优秀!