以下这段代码怎么理解?

2025-05-11 05:09:20
推荐回答(1个)
回答1:

这个show函数其实就是对double数组的每一个元素,用field_width作为宽度参数打印。

show(array, count, 12);

就是对array的每一个元素,用%12lf的方式打印。


具体解释如下:

void show(double array[], size_t array_size, unsigned int field_width)
{
    char format[10] = "%";   //这段定义怎么理解?
    // format将作为“格式串”传入printf。在printf里的格式串一开头一般都是“%”吧。
    char width_str[4];       
    size_t i = 0;
    size_t j = 1;
    
    do
    {
        width_str[i++] = '0'+field_width%10;
    }while((field_width /= 10) != 0);
    // 将field_width逆序保存到width_str字符串中。比如int的12就变成字符串"21"。
    // 到这里为止format字符串是"%"
    
    do
    {
        format[j++] = width_str[--i];
    }while(i>0);
    format[j] = '\0';
    // 这里从尾到头奖width_str一个字节一个字节复制到format的末尾(也就是开头那个%的末尾)
    // 到这里为止format字符串变成了"%12"
    strcat(format, "lf");   //这段代码中strcat怎么理解?
    // strcat能将第二个字符串接到第一个字符串末尾
    // 现在format字符串变成了"%12lf"
    
    
    for(j = 0 ; j    {  
        if(j%5 == 0)
        printf("\n");
        printf(format, array[j]);   //这段代码中printf怎么理解?
        // 这里将array数组的每一个元素,用"%12lf"的格式打印到控制台。
        // "%12lf"就是打印的时候占据12个字符,要打印的array[i]位数不够,则在左边补空格。
    }
}

C语言的一个特色就是程序能生成字符串,而字符串又能控制程序运行。

还有其他问题请追问。