有什么办法可以使这段代码更简单吗?
Is there any way I can make this code any simpler?
我是一名初级程序员,正在通过哈佛提供的 CS50 在线课程学习 C。该程序应该提示用户输入高度,当他们键入高度 (1-8) 时,会根据用户输入的高度打印金字塔。当你键入 2 时,它会输出一个 2 行高的小金字塔,中间有 2 个空格。我的程序做了它应该做的事情,但我确信有比嵌套循环更好的方法。
我试过为金字塔的一侧制作一个循环而不是 2 个循环。我认为这是正确的方法,但执行起来很糟糕。
{
for (int spaces = height - line; spaces > 1; spaces--)
{
printf(" ");
}
for (int hashes = 0; hashes < line + 1; hashes++)
{
printf("#");
}
printf(" ");
for (int hashes = 0; hashes < line + 1; hashes++)
{
printf("#");
}
for (int spaces = height - line; spaces > 1; spaces--)
{
printf(" ");
}
printf("\n");
}
下面的效率更高,afaict 产生相同的结果:
static char hashes[80];
memset(hashes, '#', sizeof(hashes));
assert( height < sizeof(hashes) );
for( int line=0; line < height; line++ ) {
printf( "%*.*s %-*.*s\n",
height, line+1, hashes,
height, line+1, hashes );
}
您是初学者,所见即所得。 "trick" 是 printf(3) 在其格式字符串中有一种完全属于自己的语言,这种语言起初令人生畏。由于您的输出是常量(散列),您可以通过设置其大小、截断字符串并选择左对齐或右对齐来使用常量字符串和 "format" 字段。
学C,就要学会构造循环。在使用 C 时,您必须学习 C 标准库(以及问题领域的其他库)。通常,这些库可以让您避免循环,从而简化您的代码。
我是一名初级程序员,正在通过哈佛提供的 CS50 在线课程学习 C。该程序应该提示用户输入高度,当他们键入高度 (1-8) 时,会根据用户输入的高度打印金字塔。当你键入 2 时,它会输出一个 2 行高的小金字塔,中间有 2 个空格。我的程序做了它应该做的事情,但我确信有比嵌套循环更好的方法。
我试过为金字塔的一侧制作一个循环而不是 2 个循环。我认为这是正确的方法,但执行起来很糟糕。
{
for (int spaces = height - line; spaces > 1; spaces--)
{
printf(" ");
}
for (int hashes = 0; hashes < line + 1; hashes++)
{
printf("#");
}
printf(" ");
for (int hashes = 0; hashes < line + 1; hashes++)
{
printf("#");
}
for (int spaces = height - line; spaces > 1; spaces--)
{
printf(" ");
}
printf("\n");
}
下面的效率更高,afaict 产生相同的结果:
static char hashes[80];
memset(hashes, '#', sizeof(hashes));
assert( height < sizeof(hashes) );
for( int line=0; line < height; line++ ) {
printf( "%*.*s %-*.*s\n",
height, line+1, hashes,
height, line+1, hashes );
}
您是初学者,所见即所得。 "trick" 是 printf(3) 在其格式字符串中有一种完全属于自己的语言,这种语言起初令人生畏。由于您的输出是常量(散列),您可以通过设置其大小、截断字符串并选择左对齐或右对齐来使用常量字符串和 "format" 字段。
学C,就要学会构造循环。在使用 C 时,您必须学习 C 标准库(以及问题领域的其他库)。通常,这些库可以让您避免循环,从而简化您的代码。