是否可以按照安东·斯普劳尔(Anton Spraul)"Think Like Programmer"书中所述,在没有C++打印空格的情况下打印此形状?

Is it possible to print this shape without printing spaces in C++ as described in the book "Think Like Programmer" by Anton Spraul?

本文关键字:打印 C++ 情况下 空格 Programmer Like Spraul Think Anton 是否      更新时间:2024-09-29

在一本名为"像程序员一样思考;作者Anton Spraul,在第2章练习1,第53页,这是写的:

使用与本章前面的shapes程序相同的规则(只有两个输出语句——一个输出散列标记,另一个输出输出行尾(,编写一个程序以下形状:

########
######
####
##

所以我们只能使用cout << "n";cout << "#";,而不能使用cout << " ";

通过打印空格很容易解决这个问题(请参阅下面的代码(但是在C++中不需要打印空间就可以打印这样的形状吗

#include <iostream>
using std::cin;
using std::cout;
int main()
{
int shapeWidth = 8;
for (int row = 0; row < 4; row++) {
for(int spaceNum = 0; spaceNum < row; spaceNum++) {
cout << " ";
}
for(int hashNum = 0; hashNum < shapeWidth-2*row; hashNum++) {
cout << "#";
}
cout << "n";
}
}

通过打印空格来解决这个问题很容易(请参阅上面的代码(但是在C++中不需要打印空间就可以打印这样的形状吗

在我读到的其中一个答案中,可以去掉for (int spaceNum. . .循环,而只是放cout << setw(row+1);来实现这一点。

澄清:作者从未使用过一个形状作为必须打印如上所述的空格或缩进的例子。从字面上解释上面的练习,他希望我们通过打印"#"以及";\n〃;只有仅通过打印"空白"来打印空白或压痕#"以及";\n〃;对我来说似乎不可能,所以我想也许他写练习时不小心。或者有办法做到这一点,但只有我自己不知道。这就是我问这个问题的原因。

是的,这是可能的
将流width设置为行的长度
将流格式设置为右对齐。

在你的书或其他C++参考文献中查找流操纵器。

可能!但这是一个关于你运行的系统的问题,而不是关于C++的问题。就语言而言,它只是输出字符。输出一个"空格"字符会将光标移到屏幕上的右侧,甚至是屏幕的存在,这取决于操作系统和运行在其上的软件如何解释输出的字符。

最值得注意的是,在大多数文本控制台上,可以使用ANSI转义序列来移动光标。没有什么特别的理由这样做,除非你正在编写一个全屏文本模式的用户界面。