Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图案发生器 我是C++新手,我应该为一个模式生成器编写程序,它打印2个不同频率的字符(用户输入)。行数和列数也由用户确定_C++_Loops_Nested - Fatal编程技术网

图案发生器 我是C++新手,我应该为一个模式生成器编写程序,它打印2个不同频率的字符(用户输入)。行数和列数也由用户确定

图案发生器 我是C++新手,我应该为一个模式生成器编写程序,它打印2个不同频率的字符(用户输入)。行数和列数也由用户确定,c++,loops,nested,C++,Loops,Nested,例如,“*”必须在4行(共21行)中重复三次,“+”必须重复两次 列中,模式应如下所示: ***++***++***++***++* **++***++***++***++** *++***++***++***++*** ++***++***++***++***+ 然而,我的输出给了我21列和20行,我认为这使得下面代码中的“rows”变量毫无用处,但我不确定为什么会发生这种情况 我的输出: ***++***++***++***++* **++***++***++***++** *++***

例如,“*”必须在4行(共21行)中重复三次,“+”必须重复两次 列中,模式应如下所示:

***++***++***++***++*
**++***++***++***++**
*++***++***++***++***
++***++***++***++***+ 
然而,我的输出给了我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;icout删除循环的列,并在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;
    }
}