C言語ケーススタディ 8進数表記の文字列を数値に変換する




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



2進数表記の文字列を数値に変換するプログラムを改造し8進数表記の文字列を変換するようにします。
8進数表記の文字列から数値への変換もstrtol、scanf関数などで行うことができるので、実用的にはあまり意味のないプログラムです。
主な改造のポイントは次のようになります。
・関数名をbinvalからoctvalに変更
・ループ内の2を掛けている所を8に変更
・文字列の最大サイズを11桁に変更
unsigned int
        octval(char *str);

main(int argc, char *argv[])
{
        if(argc != 2){
                printf("コマンドの入力形式が間違っています.\n");
                return;
        }
        printf("%o\n", octval(argv[1]));
}


unsigned int
        octval(char *str)
{
        unsigned long
                num;
        int     i1, ch;

        num = 0L;
        for(i1 = 0; ; i1++){
                if(str[i1] >= '0' && str[i1] <= '7'){
                        ch = str[i1] - '0';
                }
                else if(str[i1] == '\0'){
                        break;
                }
                else{
                        printf("変換エラー\n");
                        num = 0xFFFFFFFF;
                        break;
                }
                num *= 8;
                num += ch;
                if(i1 >= 11){
                        printf("値がオーバーしました\n");
                        num = 0xFFFFFFFF;
                        break;
                }
        }
        return(num);
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run 377」のように実行する必要があるので実行ボタンはありません


[an error occurred while processing this directive]