吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4136|回复: 16
收起左侧

[C&C++ 转载] 二进制转10进制 调用函数数组  成功运行

[复制链接]
ftmovie 发表于 2017-12-31 23:23
本帖最后由 ftmovie 于 2018-1-3 19:47 编辑

#include <stdio.h>
#include <string.h>
int zh( char str[])
{
        int sum = 0;/*定义总值*/
        int j = 1;/*交换数值*/
        int pot = strlen(str) - 1;/*把str数组值先减一*/
        for (; pot >= 0; pot--) /*循环 pot值 每次减一*/
        {
                sum += (str[pot] - '0')*j;
                j*=2;/*每次j都乘2*/
        }
        return sum;
}
int main()
{
        int result;
        char a[10];
        scanf_s("%s",a,10);
        result = zh(a);
                printf("thit is number %d\n",result);
        return 0;
}


在这里重点说一下scanf_s这个参数  如果要输入数据存到数组一定要加上大小不然会出错

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ftmovie 发表于 2018-1-1 19:34
是二进制转10进制
#include <stdio.h>
#include <string.h>
int zh(char str[])
{
        int sum = 0;/*定义总值*/
        int j = 1;/*交换数值*/
        int pot = strlen(str) - 1;/*把str数组值先减一*/
        for (; pot >= 0; pot--) /*循环 pot值 每次减一*/
        {
                sum += (str[pot] - '0')*j;
                j*=2;/*每次j都乘2*/
        }
        return sum;
}
int main()
{
        int result;
        char a;
       
        printf("please input 1001 number ");
        scanf_s("%d",a);
        result= zh(a);
        printf("thit is number %d\n",result);
        return 0;
}

把result= zh(a);  改成实参 result= zh("1101");
编译的时候就不会出错
不然会提示 严重性        代码        说明        项目        文件        行        禁止显示状态  错误(活动)                "char" 类型的实参与 "char *" 类型的形参不兼容        1       
严重性        代码        说明        项目        文件        行        禁止显示状态 错误        C2664        “int zh(char [])”: 无法将参数 1 从“char”转换为“char []”        1       
klamauk 发表于 2018-1-1 00:09
#include <stdio.h>
#include <string.h>
int zh(char str[])
{
        int sum = 0;/*定义总值*/
        int j = 1;/*交换数值*/
        int pot = strlen(str)-1;/*把str数组值先减一*/
        for (; pot >= 0; pot--) /*循环 pot值 每次减一*/
        {
                sum += (str[pot] - '0')*j;
                j*=2;/*每次j都乘2*/
        }
        return sum;
}
int main()
{
        int result;
        char a[1001]={0};
      
        printf("please input 1001 number ");
        scanf("%s",a);
        result= zh(a);
        printf("thit is number %d\n",result);
        return 0;
}
估计意思差不多是这样。求的是各个位数乘 j 再相加的和
klamauk 发表于 2017-12-31 23:46
丸子吃枣药丸 发表于 2017-12-31 23:46
for (; pot >= 0; pot--) /*循环 pot值 每次减一*/   这个for第一个参数能为空?
pmc 发表于 2017-12-31 23:48
楼主这个是要实现什么功能?
pmc 发表于 2017-12-31 23:51
看楼主子函数是传的数组,但是主函数中定义的a却是单个字符而不是一个数组,还有就是printf,虽然只是一个提示,不过没懂为嘛楼主写的是number,怎么又变成数字了呢
pmc 发表于 2017-12-31 23:56
丸子吃枣药丸 发表于 2017-12-31 23:46
for (; pot >= 0; pot--) /*循环 pot值 每次减一*/   这个for第一个参数能为空?

这里可以的,第一个代表的是循环的入口,前面在求数组长度时相当于已经给pot初始化了
pmc 发表于 2018-1-1 00:04
从楼主写的是有返回值的函数和输出用的%d来看,楼主的意思应该是定义int型数组吧,int a[1001]],至于那个循环里面不知道为嘛楼主有个减去串节字符的操作,如果这里把减去串节字符去掉,a定义为int型的数组,我倒是可以理解为这个是把二进制转化为十进制的操作,楼主现在这种写法我的确是没看懂,希望楼主可以说明一下想要实现的功能
LYQingYe 发表于 2018-1-1 00:13
char a[255];
        
        printf("please input 1001 number ");
        scanf_s("%s",a);  这样改
pmc 发表于 2018-1-1 00:15
本帖最后由 pmc 于 2018-1-1 00:20 编辑
klamauk 发表于 2018-1-1 00:09
#include
#include
int zh(char str[])

这里为嘛要减去串节字符呢,我记得用到串节字符的就只有字符型数组了,比如说数组的第五项就是a[5],没有什么减'0'的操作吧,具体的我没查过,但是int型数组应该是没有串节字符

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
丸子吃枣药丸 + 1 + 1 大佬好

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 15:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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