c - 是否可以创建一个用户输入数字金字塔,其中金字塔仅显示 0 - 9?
问题描述
我尝试编辑循环的计数器,以便最后一行printf
是非负的,但我不太确定要编辑循环的哪一部分。
#include <stdio.h>
void printPatternHere(int height);
int main() {
int height;
printf("Enter the number of rows: ");
scanf("%d", &height);
printf("printPattern: \n");
printPatternHere(height);
return 0;
}
void printPatternHere(int height) {
int n, c, row, t = 1;
int counter = 0;
for (row = 1; row <= height; row++) {
for (c = 1; c <= height - row; c++)
t = row; // start each line with row number
for (c = 1; c <= row; c++) {
counter++;
if (counter > 9) {
t = t % 10;
}
printf("%d ", t);
t++;
}
for (c = 1 ; c < row; c++) {
t--; //reset row number
}
printf("\n");
}
}
如果 userinput 是 14,它的输出应该是这样的:
1
2 3
3 4 5
4 5 6 7
5 6 7 8 9
6 7 8 9 0 1
7 8 9 0 1 2 3
8 9 0 1 2 3 4 5
9 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0 1
2 3 4 5 6 7 8 9 0 1 2 3
3 4 5 6 7 8 9 0 1 2 3 4 5
4 5 6 7 8 9 0 1 2 3 4 5 6 7
解决方案
你的代码太复杂了。金字塔的输出可以做得更简单。
例如这个循环
for (c = 1; c <= height - row; c++)
t = row; // start each line with row number
没有意义。
这个给你。
#include <stdio.h>
int main(void)
{
while ( 1 )
{
const unsigned int Base = 10;
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
for ( unsigned int i = 0; i < n; i++ )
{
for ( unsigned int j = 0; j < i + 1; j++ )
{
printf( "%u ", ( j + i + 1 ) % Base );
}
putchar( '\n' );
}
putchar( '\n' );
}
return 0;
}
程序输出可能看起来像
Enter a non-negative number (0 - exit): 14
1
2 3
3 4 5
4 5 6 7
5 6 7 8 9
6 7 8 9 0 1
7 8 9 0 1 2 3
8 9 0 1 2 3 4 5
9 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0 1
2 3 4 5 6 7 8 9 0 1 2 3
3 4 5 6 7 8 9 0 1 2 3 4 5
4 5 6 7 8 9 0 1 2 3 4 5 6 7
Enter a non-negative number (0 - exit): 0
如果您想编写一个单独的函数来输出模式,那么程序可以如下所示。
#include <stdio.h>
FILE * display_pyramid( unsigned int n, FILE *fp )
{
const unsigned int Base = 10;
for ( unsigned int i = 0; i < n; i++ )
{
for ( unsigned int j = 0; j < i + 1; j++ )
{
fprintf( fp, "%u ", ( j + i + 1 ) % Base );
}
fputc( '\n', fp );
}
return fp;
}
int main(void)
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
fputc( '\n', display_pyramid( n, stdout ) );
}
return 0;
}
推荐阅读
- c++ - 从加密项目的向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- laravel - Vue / Laravel - SPA 性能
- c# - Firebase 推送通知仅在应用程序处于前台 ios 时接收
- javascript - 仅通过javascript从网站上的json文件中提取信息
- amazon-web-services - 如何编写 ETL 作业以将 mysql 数据库表传输到另一个 mysql rds 数据库
- r - ggsurvplot:如何使 P 值加粗
- c - 如何将 500 个指针的一维数组传递给 C 中的函数
- node.js - 有时 node-rdkafka 消费者没有从主题中读取任何消息
- tfs - 如何在 TFS 2018.3(本地)中自定义迭代板上的列
- django - Django 使用 FilterSet 过滤布尔值