C++ setw没有工作的方式,我需要它
这个想法是打印4个形状,前两个形状打印罚款,接下来两个形状使用setw是为了反射镜,但仍然打印波纹管,因为它们是。C++ setw没有工作的方式,我需要它
我的理解是,setw制作了一种文本框,它从参数中指定的文本位置开始从右向左输出,它适用于我尝试过的其他示例。但由于某些原因,当通过这些for循环时,它只会添加设置数量的选项卡空间,并在setw位置的错误一侧进行打印。
#include <conio.h> #include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int x = 1;
for (int i = 0; i < 9; i++)
{
for (int i = 1; i <= x; i++)
cout << "*";
x++;
cout << endl;
}
cout << endl;
x = x - 1;
for (int i = 0; i < 9; i++)
{
for (int i = 1; i <= x; i++)
cout << "*";
x--;
cout << endl;
}
cout << endl;
for (int i = 0; i < 9; i++)
{
cout << setw(10);
for (int i = 1; i <= x; i++)
cout << "*";
x++;
cout << endl;
}
cout << endl;
for (int i = 0; i < 9; i++)
{
cout << setw(10);
for (int i = 1; i <= x; i++)
cout << "*";
x--;
cout << endl;
}
_getch();
}
回答:
我无法看到您的输出,但此信息可能有所帮助。
setw
用于指定下一个数字或字符串值的最小空间。这意味着如果指定的空间大于数值或字符串的值,它将添加一些填充。
最重要的是setw
不会改变输出流的内部状态,所以它只决定下一个输入的大小,这意味着它只会用于for循环的第一次迭代。
回答:
你setw()
一次,然后输出x
次。 setw()
仅影响下一个输出,即第一个字符 - 按照您的指示从右向左设置 - 将其余字符附加到它。
所以,你的内循环(一个循环计数器阴影外一个... 不寒而栗)不能工作打算 - 您需要打印您的外形线条一气呵成的setw()
是有效的。这可以用一个相当有用的std::string
构造函数来完成:
basic_string(size_type count, CharT ch,
const Allocator& alloc = Allocator());
构建串字符ch的数份。如果count> = npos,则行为未定义。
(来源:cppreference.com)
再有就是有比别人少一个行第三形状的问题。
固定码:
#include <iostream> #include <iomanip>
#include <string>
// <conio.h> is not available on non-Windows boxes,
// and if MSVC were smart enough to keep the console
// window open, this kludge wouldn't be necessary
// in the first place.
#ifdef _WIN32
#include <conio.h>
#endif
using namespace std;
int main()
{
int x = 1;
for (int i = 0; i < 9; i++)
{
cout << string(x, '*') << "\n";
x++;
}
cout << endl;
x = x - 1;
for (int i = 0; i < 9; i++)
{
cout << string(x, '*') << "\n";
x--;
}
cout << endl;
for (int i = 0; i < 9; i++)
{
// increment first, or the loop will not print
// the last line, making the third shape different.
x++;
cout << setw(10) << string(x, '*') << "\n";
}
cout << endl;
for (int i = 0; i < 9; i++)
{
cout << setw(10) << string(x, '*') << "\n";
x--;
}
#ifdef _WIN32
_getch();
#endif
}
这可以通过在每个循环创建一个string
,然后打印的子字符串(而不是每次都创建一个新的临时string
)进一步精简,但我想保持接近您的原始代码。
以上是 C++ setw没有工作的方式,我需要它 的全部内容, 来源链接: utcz.com/qa/259045.html