Chenzhjn17 2020-12-23 15:49 采纳率: 60%
浏览 1766
已采纳

输入一个字符串,过滤掉所有的非数字字符,得到由数字字符组成的字符串,并输出?

#include<stdio.h>
#include<string.h>
int main()
{
    long a;
    char ch[80];
    int i=0,n;
    printf("请输入一个数:\n");
    scanf("lf",&a);
    do
    {
        ch[i]=a%16;
        i++;
        a=a/16;
    }while(a!=0);
    ch[i]='\0';
    n=i;
    for(i=0;n<i;i++)
        switch(ch[i])
    {
        case 10:
            ch[i]='A';
            continue;
        case 11:
            ch[i]='B';
            continue;
        case 12:
            ch[i]='C';
            continue;
        case 13:
            ch[i]='D';
            continue;
        case 14:
            ch[i]='E';
            continue;
        case 15:
            ch[i]='F';
            continue;
    }
    printf("转换为十六进制为:\n");
    puts(ch);
    return 0;
}

初学c语言,想问问这个代码错哪了,蟹蟹。

  • 写回答

3条回答 默认 最新

  • 泡视界 2020-12-23 18:16
    关注

    你代码问题很多

    参考以下我改的

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        long a;
        int ch[80];            //想要输入的是数字,容器需要是数字的类型,改为int
        char ch2[80];        //添加一个char型的ch2,存放字符串
        int i = 0, n;
        printf("请输入一个数:\n");
        scanf_s("%ld", &a);    //同上一个答案一样,需要将lf改为ld输入整数
        do
        {
            ch[i] = a % 16;
            i++;
            a = a / 16;
        } while (a != 0);
        ch2[i] = '\0';        //改为将ch2的末尾设置为\0,
        n = i;
        for (i = 0; i < n; i++) {        //for循环你没有加{},并且你原来写的i=0; n<i; i++。
                                            //你仔细看看和我的有啥区别
            switch (ch[i])
            {
            case 10:
                ch2[n - i - 1] = 'A';    //通过给ch2写值,并且要考虑反转,
                                            //因为你ch中保存的是反的余数,需要翻过了
                break;     //我没用白你为社么用continue
            case 11:
                ch2[n - i - 1] = 'B';
                break;
            case 12:
                ch2[n - i - 1] = 'C';
                break;
            case 13:
                ch2[n - i - 1] = 'D';
                break;
            case 14:
                ch2[n - i - 1] = 'E';
                break;
            case 15:
                ch2[n - i - 1] = 'F';
                break;
            case 9:
                ch2[n - i - 1] = '9';    //添加0-9的判断
                break;
            case 8:
                ch2[n - i - 1] = '8';
                break;
            case 7:
                ch2[n - i - 1] = '7';
                break;
            case 6:
                ch2[n - i - 1] = '6';
                break;
            case 5:
                ch2[n - i - 1] = '5';
                break;
            case 4:
                ch2[n - i - 1] = '4';
                break;
            case 3:
                ch2[n - i - 1] = '3';
                break;
            case 2:
                ch2[n - i - 1] = '2';
                break;
            case 1:
                ch2[n - i - 1] = '1';
                break;
            case 0:
                ch2[n - i - 1] = '0';
                break;
            }
        }
        printf("转换为十六进制为:\n");
        puts(ch2);                        //最后改为输出ch2
        return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图