我的输出不是大写字母('')之后的大写下一个参数。
int main(void)
{
int i = 0;
int flag = OUT;
char name[100];
int leng = strlen(name);
printf("Value pls: \n");
fgets(name, 100, stdin);
printf("%c", toupper(name[0]));
while(name[i])
{
printf("%c", name[i + 1]);
if(i == ' ')
{
printf("%c", toupper(name[i + 1]));
}
i++;
}
}
它总是显示这样的事情: 值pls: 琼史密斯 乔恩史密斯
单词“smith”总是小写的。
答案 0 :(得分:5)
"小提琴"与循环计数器通常是不明智的。这绝对是你想在这里做的工作。 canonic方法使用旗帜。粗略轮廓:
TNotifyEvent
另一方面,问题的一部分是这一行:
TNotifyEvent
int wasspace = 1; // to capitalize the *first* character
for (i=0; name[i]; ++i)
{
printf("%c", wasspace ? toupper((unsigned char)name[i]) : name[i]);
wasspace = (name[i] == ' ');
// maybe better: wasspace = isspace((unsigned char)name[i]);
// so you handle tabs, newlines etc. as well
}
是您的循环计数器,不 if(i == ' ')
中的i
个字符。将它与空间进行比较是没有意义的。
答案 1 :(得分:0)
这是一个很好的机会,可以了解更多关于其他操作员的信息 - 在这种情况下"?:":
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char name[100];
printf("Value pls: \n");
fgets(name, 100, stdin);
for(int i = 0 ; i < strlen(name) ; ++i)
printf("%c", (i == 0 || name[i-1] == ' ') ? toupper(name[i]) : name[i]);
}
祝你好运。