Chenzhjn17 2020-12-23 15:49 采纳率: 50%
浏览 1651
已采纳

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

#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;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 在黎明的反思 2020-12-23 16:27
    关注

    scanf("lf",&a);改成scanf("%ld",&a);

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-12 03:54
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 QT 实现 RSTP 语音对讲功能
  • ¥50 AES魔改之后的安全性关于PRF(相关搜索:密码学)
  • ¥15 有没有谁能高分通过 reCaptcha v3验证,国外网站。有兴趣留言,有偿。
  • ¥15 用C语言写的一个程序遇到了两个问题第一是偏移正确但读取不到坐标,第二个问题是自己定义的函数实现不了获取指定进程模块。
  • ¥15 在安装Anaconda时总是闪退怎么办?
  • ¥15 对图中电路进行以下几个方面的分析
  • ¥15 对图中电路进行以下几个方面的分析
  • ¥15 对图中电路进行以下几个方面的分析
  • ¥15 对图中电路进行以下几个方面的分析
  • ¥500 抖音主页视频预存加载卡bug