注册 登录
编程论坛 C语言论坛

运行时“C2057、C2466、C2133中英文错误信息同步显示功能”

WeiDing 发布于 2023-05-12 10:11, 55 次点击

/* Note:Your choice is C IDE */
#include "stdio.h"
void combine_increase(int* arr,int start, int* result, int count, const int NUM, const int arr_len)
{
    int i = 0;
    for (i = start; i < arr_len + 1 - count; i++)
    {
        result[count-1] = i;
        if (count - 1 == 0)
        {
            int j;
            for (j = NUM - 1; j >= 0; j--)
            printf("%d\t",arr[result[j]]);
            printf("\n");
        }
        else
        combine_increase(arr,i + 1, result, count - 1, NUM, arr_len);
    }
}
int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int num = 4;
    int result[num];
   
    combine_increase(arr, 0, result, num, num, sizeof(arr)/sizeof(int));
    printf("分界线\n");
    /*combine_decrease(arr,sizeof(arr)/sizeof(int),result,num,num);*/
    return 0;
}
1 回复
#2
rjsp2023-05-12 12:29
不知所云,你想问什么?为什么在你的提问中连个问号都没有?

如果是指
int num = 4;
int result[num];
不能编译通过的话,那既然你用了VLA,就应该选用支持VLA的编译器 ------ 比如gcc、clang等等。
或者将代码改为
constexpr int num = 4;
int result[num];
然后选用支持C23标准的编译器 ------ 比如gcc14(编译参数添加-std=c2x)。

------------------------------------------------
欲实现的功能本身挺有意思的,我试着将使用者与算法本身分离

程序代码:
#include <stdio.h>
#include <stdbool.h>

struct combine
{
    const int* arr;
    const size_t arr_n;
    size_t* result;
    const size_t result_n;
};
bool combine_create( struct combine* cb )
{
    for( size_t i=0; i!=cb->result_n; ++i )
        cb->result[i] = i;
    return cb->result_n <= cb->arr_n;
}
bool combine_increase( struct combine* cb )
{
    for( size_t i=0; i!=cb->result_n; ++i )
    {
        size_t j = cb->result_n-1-i;
        if( cb->result[j] != cb->arr_n-1-i )
        {
            ++cb->result[j];
            for( ++j; j!=cb->result_n; ++j )
                cb->result[j] = cb->result[j-1] + 1;
            return true;
        }
    }
    return false;
}

int main( void )
{
    int arr[] = { 1, 2, 3, 4, 5, 6 };
    size_t result[4];

    const size_t arr_n = sizeof(arr)/sizeof(*arr);
    const size_t result_n = sizeof(result)/sizeof(*result);
    struct combine cb = { arr, arr_n, result, result_n };
    for( bool b=combine_create(&cb); b; b=combine_increase(&cb) )
    {
        for( size_t i=0; i!=result_n; ++i )
            printf( "%d%c", arr[result[i]], "\t\n"[i+1==result_n] );
    }

    return 0;
}
1