Language: C

#include<stdio.h>

#define CARD_MAX                200

#define TIMES_DIGIT_MAX        3

#define PRIME                        1

#define TWICE                        2

#define RANK                        10

#define DEFF                        3

#define DIFF_STRING_INT        48

#define RESET_ANS                0

#define ARRAY_END                1

#define COUNT_RESET                0

#define ARRAY_RESET                0

#define LOOP                        1

#define LOOP_RESET                0

#define RETURN                        0

void                        array_reset( unsigned char *array, unsigned short size );

unsigned short        scan_word( unsigned char *str, unsigned short length_max );

void                        print_word( unsigned char *str, unsigned short length );

void                        card_shuffle( unsigned char *card, unsigned short num );

unsigned short        str_to_int( unsigned char *str, unsigned short digit );

int main(){

        unsigned char ubW_D_card[ CARD_MAX + ARRAY_END ];                /* カードのマークを格納する配列 */

        unsigned short usW_D_card_num;                                /* カードの枚数 */

        unsigned char ubW_D_char_times[ TIMES_DIGIT_MAX + ARRAY_END ];        /* シャッフルする回数を表す文字列 */

        unsigned short usW_D_int_times;                                /* シャッフルする回数 */

        unsigned short usW_D_times_digit;                        /* シャッフルする回数の桁数 */

        unsigned short usW_C_i;                                                /* ループ変数 */

        

        /* カードを入力、シャッフル、出力 */

        while( LOOP ){

                /* カードのマークの入力 */

                usW_D_card_num = scan_word( ubW_D_card, CARD_MAX + ARRAY_END );

                

                /* 入力が - のとき終了*/

                if( *ubW_D_card == '-' ){

                        break;

                }

                else;

                /* シャッフルする回数を文字列として入力 */

                usW_D_times_digit = scan_word( ubW_D_char_times, TIMES_DIGIT_MAX + ARRAY_END );

                /* シャッフルする回数を表す文字列を整数に変換 */

                usW_D_int_times = str_to_int( ubW_D_char_times, usW_D_times_digit );

                

                /* 指定された回数だけシャッフル */

                for( usW_C_i = LOOP_RESET; usW_C_i < usW_D_int_times; usW_C_i++ ){

                        card_shuffle( ubW_D_card, usW_D_card_num );

                }

                /* シャッフルした結果の出力 */

                print_word( ubW_D_card, usW_D_card_num );

        }

        return RETURN;

}

/* 関数名：配列初期化 */

/* 概要：渡されたアドレスを先頭とする配列の値を初期化する */

/* 引数：初期化する配列の先頭アドレス、その配列の大きさ */

/* 戻り値：なし */

void array_reset( unsigned char *array, unsigned short size )

{

        unsigned short usW_C_i;        /* ループ変数 */

        

        /* 配列の初期化 */

        for( usW_C_i = COUNT_RESET; usW_C_i < size; usW_C_i++ ){

                 *( array + usW_C_i ) = ARRAY_RESET;

         }

}

/* 関数名：文字列入力 */

/* 概要：文字列を入力する。入力された文字列の長さを返す */

/* 引数：文字列を格納する配列の先頭アドレス、その配列の大きさ */

/* 戻り値：入力された文字列の長さ */

unsigned short scan_word( unsigned char *str, unsigned short length_max )

{

        unsigned short usW_C_count_text = COUNT_RESET;        /* 文字列長カウンタ */

        unsigned short usW_C_i;                               /* ループ変数 */

        /* 配列の初期化 */

        for( usW_C_i = COUNT_RESET; usW_C_i < length_max; usW_C_i++ ){

                *( str + usW_C_i ) = ARRAY_RESET;

        }

        

        /* 文字列の入力 */

        for( usW_C_i = LOOP_RESET; usW_C_i < length_max; usW_C_i++ ){

                scanf("%c", str + usW_C_i);

                /* 入力終了の処理 */

                if( (*(str + usW_C_i) == ' ') || (*(str + usW_C_i) == '\n') ){

                        break;

                }

                /* 文字数をカウント */

                usW_C_count_text++;

        }

        /* 文字列長を返す */

        return usW_C_count_text;

}

/* 関数名：文字列出力 */

/* 概要：渡された文字列を出力 */

/* 引数：出力する文字列の配列の先頭アドレス、出力する文字列の長さ */

/* 戻り値：なし */

void print_word( unsigned char *str, unsigned short lengt )

{

        unsigned short usW_C_i;         /* ループ変数 */

        /* 文字列を出力 */

        for( usW_C_i = LOOP_RESET; usW_C_i < length; usW_C_i++ ){

                printf("%c", *(str + usW_C_i));

        }

        /* 改行 */

        printf("\n");

}

/* 関数名：カードシャッフル */

/* 概要：渡されたカードの配列の中から入力された枚数だけ下に移動させる */

/* 引数：カードを格納した配列の先頭アドレス、カードの枚数 */

/* 戻り値：なし */

void card_shuffle( unsigned char *card, unsigned short num )

{

        unsigned char card_memo[ CARD_MAX * TWICE + ARRAY_END ];        /* カードの内容を記録する配列 */

        unsigned char char_stage[ TIMES_DIGIT_MAX + ARRAY_END ];             /* 移動させる枚数を表す文字列 */

        unsigned short int_stage;                      /* 移動させる枚数 */

        unsigned short stage_digit;                    /* 移動させる枚数の桁数 */

        unsigned short usW_C_i;                        /* ループ変数 */

        

        /* 配列初期化 */

        array_reset( card_memo, CARD_MAX * TWICE + ARRAY_END );

        

        /* カードを複製 */

        for( usW_C_i = LOOP_RESET; usW_C_i < num; usW_C_i++ ){

                card_memo[ usW_C_i ] = *( card + usW_C_i );

        }

        /* カードの複製の続きに再度カードを複製 */

        for( usW_C_i = LOOP_RESET; usW_C_i < num; usW_C_i++ ){

                card_memo[ usW_C_i + num ] = *( card + usW_C_i );

        }

        

        /* 移動させる枚数を文字列として入力 */

        stage_digit = scan_word( char_stage, TIMES_DIGIT_MAX + ARRAY_END );

        /* 移動させる枚数を表す文字列を整数に変換 */

        int_stage = str_to_int( char_stage, stage_digit );

        /* 指定された枚数だけ移動させた結果を代入 */

        for( usW_C_i = LOOP_RESET; usW_C_i < num; usW_C_i++ ){

                *( card + usW_C_i ) = card_memo[ usW_C_i + int_stage ];

        }

}

/* 関数名：文字列整数化 */

/* 概要：文字型の配列であらわされる数字を整数型に変換 */

/* 引数：変換する文字列の先頭アドレス、数字の桁数 */

/* 戻り値：変換後の整数 */

unsigned short str_to_int( unsigned char * str, unsigned short digit )

{

        unsigned short multi;             /* 桁上げ計算用変数 */

        unsigned short ans = RESET_ANS;           /* 結果の格納用変数 */

        unsigned short usW_C_i, j;        /* ループ変数 */

        /* 文字列を整数に変換 */

        for( usW_C_i = LOOP_RESET; usW_C_i < digit; usW_C_i++ ){

                /* 計算用変数の初期化 */

                multi = PRIME;

                /* 上げる桁数の計算 */

                for( j = LOOP_RESET; j < usW_C_i; j++ ){

                        multi *= RANK;

                }

                /* 変換した結果を代入 */

                ans += ( *(str + digit - usW_C_i - DEFF) - DIFF_STRING_INT ) * multi;

        }

        /* 変換した結果を返す */

        return ans;

}




Compiler output:
main.c: In function 'print_word':
main.c:199:46: error: 'length' undeclared (first use in this function); did you mean 'lengt'?
  199 |         for( usW_C_i = LOOP_RESET; usW_C_i < length; usW_C_i++ ){
      |                                              ^~~~~~
      |                                              lengt
main.c:199:46: note: each undeclared identifier is reported only once for each function it appears in