我正在尝试设计一个简单的程序来询问用户名,但是当输入的用户名稍后使用时,它的第一个字母应该是大写的。
我怎么能这样做?
#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);
}
答案 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的指针)来跳过第一个字符。