图案发生器 我是C++新手,我应该为一个模式生成器编写程序,它打印2个不同频率的字符(用户输入)。行数和列数也由用户确定
例如,“*”必须在4行(共21行)中重复三次,“+”必须重复两次 列中,模式应如下所示:图案发生器 我是C++新手,我应该为一个模式生成器编写程序,它打印2个不同频率的字符(用户输入)。行数和列数也由用户确定,c++,loops,nested,C++,Loops,Nested,例如,“*”必须在4行(共21行)中重复三次,“+”必须重复两次 列中,模式应如下所示: ***++***++***++***++* **++***++***++***++** *++***++***++***++*** ++***++***++***++***+ 然而,我的输出给了我21列和20行,我认为这使得下面代码中的“rows”变量毫无用处,但我不确定为什么会发生这种情况 我的输出: ***++***++***++***++* **++***++***++***++** *++***
***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+
然而,我的输出给了我21列和20行,我认为这使得下面代码中的“rows”变量毫无用处,但我不确定为什么会发生这种情况
我的输出:
***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+
+***++***++***++***++
***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+
+***++***++***++***++
***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+
+***++***++***++***++
***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+
+***++***++***++***++
#包括
使用名称空间std;
int main()
{
字符a,b;
int n,//字符a重复的次数
m、 //字符b重复的次数
行数,//行数
列数,//列数
sumCharInRow=0;
cout>a;
cout>n;
cout>b;
cout>m;
cout>行;
cout>列;
对于(int i=0;i cout删除循环的列,并在sum超过列时添加continue语句
for (int i = 0; i < rows;) {
for (int k = 0; k < n; k++) {
cout << a;
sumCharInRow++;
if (sumCharInRow >= columns) {
cout << "\n";
i++;
sumCharInRow = 0;
break;
}
}
if (sumCharInRow >= columns)
continue;
for (int l = 0; l < m; l++) {
cout << b;
sumCharInRow++;
if (sumCharInRow >= columns) {
cout << "\n";
i++;
sumCharInRow = 0;
break;
}
}
}
return 0;
}
for(int i=0;i 您可以迭代矩阵的每种情况,但为每种情况打印几个字符
您可以选择打印哪个字符以保持两个循环:
void print_pattern(int col, int row, char c1, char c2, int n1, int n2)
{
int counter = 0;
for (int j = 0; j != row; ++j) {
for (int i = 0; i != col; ++i) {
std::cout << (counter < n1 ? c1 : c2);
if (++counter == n1 + n2) {
counter = 0;
}
}
std::cout << std::endl;
}
}
void打印模式(整数列、整数行、字符c1、字符c2、整数n1、整数n2)
{
int计数器=0;
对于(int j=0;j!=行;++j){
for(int i=0;i!=col;++i){
std::cout两个最嵌套的循环一起打印n+m
字符。这由两个外部循环重复列*行
次,总共打印(n+m)*列*行
字符(不计算换行数)。虽然您总共只能打印colums*行
个字符。因此,您的行数是预期的5倍-5==2+3
下次,请使用IDE中的调试器一步一步地执行类似的循环,这将非常有助于了解发生了什么。@IgorTandetnik感谢您的支持解释。我能知道如何解决这个问题吗?这与j++
的增量有关吗?谢谢你的回答,我测试了你的代码,但我得到的结果是***++***++***++++***++++***++
列变量的值是多少?21,我使用了与示例相同的变量(4行,21列)很抱歉,我编辑了这篇文章,在for循环中声明sumCharInRow变量是一个很大的错误。很抱歉continue;
因为循环的最后一条语句是无用的(您继续内部循环,而不是外部循环),如果您离开内部循环(使用break
),您对该模式不太了解。您好,非常感谢您的回复。但是,我可以问一下计数器
是如何工作的吗?cond?value1:value2
类似于if
/else
是跟踪我们在该模式中的位置的变量。
void print_pattern(int col, int row, char c1, char c2, int n1, int n2)
{
int counter = 0;
for (int j = 0; j != row; ++j) {
for (int i = 0; i != col; ++i) {
std::cout << (counter < n1 ? c1 : c2);
if (++counter == n1 + n2) {
counter = 0;
}
}
std::cout << std::endl;
}
}