我必须创建一个程序,要求用户输入许多行,然后创建一个floyd三角形。问题是我似乎没有设法做出这种特殊模式:
1 2 3 4 5 6 7 8 9 10
我只能创建基本程序
#include <stdio.h>
#include <stdlib.h>
int rows, r, c, a;
int number=1;
int main()
{
printf("Floyd Triangle\n");
printf("--------------");
printf("\nPlease enter an integer number of rows: ");
scanf("%d",&rows);
while(rows<=0)
{
printf("\nYou must enter an integer value: ");
scanf("%d",&rows);
}
for(r=1;r<=rows;r++)
{
for(c=1;c<=r;+c++)
{
printf("%d ", number++);
}
printf("\n");
}
到目前为止,我的代码中没有错误
答案 0 :(得分:0)
只需在每行的第一个数字之前打印一些空格
// ...
for (r = 0; r < rows; r++) {
printsomespaces(r, rows); // prints some spaces depending on current row and total rows
for (c = 0; c < r; +c++) {
printf("%d ", number++);
}
printf("\n");
}
// ...
如果您不能编写自己的函数(无printsomespaces
),请使用循环:
//...
//printsomespaces(r, rows);
for (int space = 0; space < XXXXXXXX; space++) putchar(' ');
//...
其中XXXXXXXX
是使用r
和rows
进行的计算。
尝试(未经测试)2 * (rows - r)
(2是每个数字的宽度:1代表数字+ 1代表空格)。
答案 1 :(得分:0)
我还没有学会如何实现自己的功能。没有办法仅通过使用循环来完成此操作吗?
有。此练习的主要问题是计算每列所需的宽度,这当然取决于底行中的数字。可以通过多种方式确定数字的位数。也许最简单的方法是通过snprintf(char *s, size_t n, const char *format, ...)
函数,
…返回将要写入的字符数
n
是否足够大...如果
n
为零,则不会写入任何内容, 并且s
可以为空指针。
// we need to compute the width the of widest number of each column
int width[rows];
const int max = rows*(rows+1)/2; // the greatest number
for (c=1; c<=rows; ++c) // see how many characters will be written
width[c-1] = snprintf(NULL, 0, "%d ", max-rows+c);
for (r=1; r<=rows; ++r, puts(""))
for (c=1; c<=rows; ++c)
if (c <= rows-r) // here comes an empty cell in this row
printf("%-*c", width[c-1], ' ');
else
printf("%-*d", width[c-1], number++);