鱼C论坛

 找回密码
 立即注册
查看: 2909|回复: 2

我的一个色值HEX码转化为rgb数值的代码,求完善。

[复制链接]
发表于 2012-12-5 09:57:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Tongxi 于 2012-12-5 10:30 编辑

我写的代码如下:

#include <stdio.h>

/* hex to RGB */
main()

{
    int r, g, b, c, pos;

    pos = 1;
    while(pos > 0){
        scanf("%2x",&r);
        scanf("%2x",&g);
        scanf("%2x",&b);

        printf("R:%d\nG:%d\nB:%d\n",r, g, b);
    }
    return 0;
}

起码有以下问题需要完善:
1.我想在输入xxoo后程序能停止(终止循环)。
2.在输入非色值HEX码(包含长度不对和字符错误的情况)后能提示重新输入

其它请大家补充完善^^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-12-13 09:53:38 | 显示全部楼层
自己回复给自己。只用《C程序设计语言》第一二章的内容

#include <stdio.h>

#define YES     1
#define NO      0
#define HEXL    2
#define FHEX    6
#define MAXWORD 1000

char s[MAXWORD];
char c[HEXL+1];
int err;

int htoi(char c[HEXL+1]);
int ten(int i);

main ()
{
    int i, j;
    int r, g, b;

    err = YES;
    for (i = 1; (s[i] = getchar()) != EOF; ++i){
        while (s[i] == '\n'){
                s[i] = '\0';
            --i;
                if (i == FHEX){
                    i = 1;
                r = ten(i);
                i = i + HEXL;
                g = ten(i);
                i = i + HEXL;
                b = ten(i);
                if (err == NO){
                    printf("Forbidden character! Please resume load.\n");
                        err = YES;
                        break;
                }
                printf("R:%d,G:%d,B:%d\n", r, g, b);

            }else{
                printf("Input error! Please resume load.\n");
            }
            for ( ; i > 0; --i)
                s[i] = '\0';
            break;
        }
    }
    return 0;
}


/* htoi: convert hexadecimal string s to integer        */
int htoi(char s[])
{
        int hexdigit, i, inhex, n;

    i = 0;
    if (s[i] == '0'){   /* skip optional 0x or 0X       */
        ++i;
        if (s[i] == 'x' || s[i] == 'X')
            ++i;
    }

    n = 0;              /* integer value to be returned */
    inhex = YES;        /*assume valid hexadecimal digit*/
    for (; inhex == YES; ++i){
        if (s[i] >= '0' && s[i] <= '9')
                hexdigit = s[i] - '0';
        else if (s[i] >= 'a' && s[i] <= 'f')
            hexdigit = s[i] - 'a' + 10;
        else if (s[i] >= 'A' && s[i] <= 'F')
            hexdigit = s[i] - 'A' + 10;
        else{
            inhex = NO;/* not a valid hexadecimal digit */
            if (i <= HEXL-1)
                err = NO;
        }
        if (inhex == YES)
            n = 16*n+hexdigit;
    }
    return n;
}

int ten(int i)
{
    int j;

    for (j = 0; j < HEXL; ++j){
        c[j] = s[i];
        ++i;
    }
    return htoi(c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2018-12-20 19:40:16 | 显示全部楼层

回帖奖励 +5 鱼币

顶下帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-1 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表