在遍历矩形区域中的每个点后打印整个字符数组

Printing an entire character array after looping through every point in a rectangular area

我正在使用双 for 循环来检查从 (-2.0, -1.12) 到 (0.47, 1.12) 的矩形区域中的每个点(坐标对)是否属于 Mandelbrot放。如果是,我想打印 1。同样,如果不是,我想打印 0。基本思想是逐行打印显示简化 Mandelbrot 集的字符数组。

这是我的主要功能:

#include <stdio.h>
#include "complex.h"
#include "mandelbrot.h"

#define STEP_X   0.06175
#define STEP_Y   0.07466                

int main(void){

    int i = 0;
    char arr[50];
    complex_t c, abs, max;
    max.real = 10000;
    max.imag = 0;

    for (c.imag = -1.12; c.imag <= 1.12; c.imag += STEP_Y){
            for (c.real = -2.0; c.real <= 0.47; c.real += STEP_X){
                    abs = abs_complex(mandelbrot(c,15));
                    if (abs.real < max.real){ 
                            arr[i] = 1;
                            i++;
                    } 
                    else{
                            arr[i] = 0;
                            i++;
                    }
            }
            printf("%s", arr);
            i = 0;  
    }
}                                         

程序编译正常,但没有产生输出。我知道我一定不能以正确的方式打印数组,但对于我来说,我无法弄清楚该怎么做。

如有任何反馈、提示或提示,我们将不胜感激。

提前致谢!

您遇到的问题是two-fold。 (1) 您正在将 十进制值 复制到 arr(例如 01)而不是 ASCII 字符('0''1').十进制01是non-printable。具有讽刺意味的是,十进制 0nul-terminating 字符,因此如果 if (abs.real >= max.real) for i == 0 arr 持有 empty-string

第二次调用 printf 时没有确保最终字符是 nul-terminating 字符。 (默认情况下,您可以通过初始化 char arr[MAXC] = ""; 并确保您的循环仅限于 i + 1 < 50 && c.real <= 0.47 来执行此操作,或者您可以在调用 i = 0; 之前用 arr[i] = 0; 肯定地终止 arr (或将 i 的声明移到第一个 for 循环中并初始化)。

这是未经测试的(我没有你的本地 headers),但看起来你想要:

#include <stdio.h>
#include "complex.h"
#include "mandelbrot.h"

#define MAXC     50
#define STEP_X   0.06175
#define STEP_Y   0.07466                

int main(void){

    complex_t c, abs, max;
    max.real = 10000;
    max.imag = 0;

    for (c.imag = -1.12; c.imag <= 1.12; c.imag += STEP_Y) {

        int i = 0;             /* declare/initialize i & arr here */
        char arr[MAXC] = "";   /* set to all zero */

        for (c.real = -2.0; 
            i + 1 < MAXC && c.real <= 0.47;  /* limit to 49 chars max */
            c.real += STEP_X) {

            abs = abs_complex (mandelbrot (c,15));

            if (abs.real < max.real) 
                arr[i++] = '1';   /* assign character '1' */
            else
                arr[i++] = '0';   /* assign character '0' */
        }
        arr[i] = 0;               /* nul-terminate line */
        printf ("%s\n", arr);     /* output line */
    }
    return 0;
}

试一试,如果您还有其他问题,请告诉我。