如何将第一个字母转换成大写?

时间:2018-01-28 23:45:39

标签: c

我正在尝试设计一个简单的程序来询问用户名,但是当输入的用户名稍后使用时,它的第一个字母应该是大写的。
我怎么能这样做?

#include <stdio.h>
#include <string.h> 
#include <ctype.h>
#include <stdlib.h>

int main() {
    char name[30];
    printf("What is your name?\n");
    scanf("%s", name);
    char n = toupper(name);
    printf("Hello %s. Could you tell us a bit about yourself?", n);
}

3 个答案:

答案 0 :(得分:2)

此行错误

char n = toupper(name);

函数toupper需要一个字符,你传递一个指针 一个角色。

正确的版本:

char n = toupper(name[0]);

这一行也错了

printf("Hello %s. Could you tell us a bit about yourself?", n);

格式说明符%s需要一个由char指针传递的字符串 正在传递一个角色。编译器应该已经警告过你。 不要忽略编译器警告。

您想要更改缓冲区中的第一个字母。所以你必须保存 转换回来的信件。

name[0] = toupper(name[0]);
printf("Hello %s. Could you tell us a bit about yourself?", name);

答案 1 :(得分:0)

如果您已收集名称,可按以下步骤操作:

if (name[0] >= 'a' && name[0] <= 'z')
{
    name[0] -= 0x20;
}
printf("Hello %s. Could you tell us a bit about yourself?", name);

假设是:

1 - 你有名字
2 - 它从字符数组的第一个字符开始 3 - 名称为ASCII /英文7位字符

除此之外,请参阅Pablo的另一个答案 - 你犯了几个错误。

答案 2 :(得分:0)

这是一个答案,它试图使您的代码以最小的变化运行。

更改

sys-note.txt

toupper(name);

仅正确使用名称的第一个字符,即toupper(*name); ,即解释为指向name的指针。

然后更改

char

tp

printf("Hello %s. Could you tell us a bit about yourself?", n);

为了先打印修改后的第一个字符,然后再打印名称的其余部分,采用指针算法(再次将printf("Hello %c%s. Could you tell us a bit about yourself?", n, name+1); 解释为char的指针)来跳过第一个字符。