我真的需要一些帮助,我已经在这里待了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;
}
答案 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;
}