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]));
该代码本应打印用户的姓名首字母,但该代码有一个错误,而是打印出每个字母之间有空格的全名。我知道错误在于 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]));