fprintf和星号金字塔

时间:2018-02-17 21:43:00

标签: c file

我真的需要一些帮助,我已经在这里待了6个小时了,我觉得我已经尽力了。这是我需要做的:

我需要在C中的triangle2.txt文件中打印一个星号金字塔。

我知道我里面的代码会创建一个金字塔(将所有fprintf语句更改为printf并且它完美地工作),但由于某种原因,当我按原样运行文件时,它只生成一个*和下面的空白行。

请让我知道你的想法,我和老师来回走动,我似乎无法得到它。谢谢。

int main() {
    FILE *ptr_file;
    int i, space, rows, k = 0; 
    ptr_file = fopen("Triangle2.txt", "w");

    if (!ptr_file) return 1;

    printf("Enter number of rows: ");
    scanf("%d", &rows);

    for (i = 1; i <= rows; ++i, k = 0) {

        for (space = 1; space <= rows - i; ++space) {
            fprintf(ptr_file, "  ");
        }

        while (k != 2 * i - 1) {
            fprintf(ptr_file, "* ");
            ++k;
        }

        fprintf(ptr_file, "\n");
    } 

    fclose(ptr_file);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

代码在发布时运行正常,问题出在其他地方,在文件系统中。

以下是对您的代码的一些评论:

  • 您必须包含<stdio.h>

  • 您应该测试scanf()的返回值。

  • 你应该使用经典的for循环打印星星。发布后,您会在各个意外的位置初始化k

  • 在C语言中,习惯使用基于零的索引值,并使用<代替<=进行最终测试。

以下是改进版本:

#include <stdio.h>

int main(void) {
    FILE *ptr_file;
    int rows, i, space, k;

    ptr_file = fopen("Triangle2.txt", "w");
    if (!ptr_file) {
        fprintf(stderr, "cannot open Triangle2.txt\n");
        return 1;
    }

    printf("Enter number of rows: ");
    if (scanf("%d", &rows) != 1) {
        fprintf(stderr, "invalid input\n");
        return 1;
    }

    for (i = 0; i < rows; i++) {
        for (space = i + 1; space < rows; space++) {
            fprintf(ptr_file, "  ");
        }
        for (k = 0; k < 2 * i + 1; k++) {
            fprintf(ptr_file, "* ");
        }
        fprintf(ptr_file, "\n");
    }

    fclose(ptr_file);
    return 0;
}