CS50 initials.c 间距错误?

CS50 initials.c spacing bug?

该代码本应打印用户的姓名首字母,但该代码有一个错误,而是打印出每个字母之间有空格的全名。我知道错误在于 for 循环,但我不确定如何调试此问题。建议?

int main(void)
{
 printf("Enter full name: ");
 string name = get_string();

    {
        printf("%c", toupper(name[0]));
    }

 for(int i = 0, n = strlen(name); i < n; i++)  
 {
     printf(" ");

     printf("%c", toupper(name[i + 1]));
 }

}

你打印的字符是正确的,但是你有 printf(" "); 所以难怪为什么这里有空格。

我认为你的意思是测试下一个字符是否为 space,如果是,则打印 space:

之后的字符
if (name[i] == ' ')
{
    printf("%c", toupper(name[i + 1]));
}

当然,在 for 循环之前,您需要打印第一个首字母,因为前面没有 space:

// print the first initial before the loop
cout << static_cast<unsigned char>(toupper(name[0]));