二进制转10进制 为什么调用函数 传数组老是出错 编译不成功

TianChuangKeJi 2018-01-02 08:48:03
二进制转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

static_cast, dynamic_cast和reinterpret_cast  为什么加上强制转换也不行
...全文
324 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2018-01-03
  • 打赏
  • 举报
回复
zh函数需要的参数是char*,你的变量a是char类型,不匹配 改成: char a[100]; printf("please input 1001 number "); scanf_s("%s", a, 100);
自信男孩 2018-01-03
  • 打赏
  • 举报
回复
#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[32];

    printf("please input 1001 number ");
    scanf_s("%s",a, 32);
    result= zh(a);
    printf("thit is number %d\n",result);
    return 0;
}
参考一下吧
leetow2006 2018-01-03
  • 打赏
  • 举报
回复
数组做参数,应该传递数组首地址
「已注销」 2018-01-03
  • 打赏
  • 举报
回复
字符串转数字,不需要从末尾开始扫描,从头开始就行了:
int zh(const char * restrict str)
{
	int sum = 0;
	while (*str != 0)
	{
		char c = *str++;
		if (c < '0' || c > '1')
		{
			break;
		}
		sum <<= 1;
		sum |= c - '0';
	}
	return sum;
}
实在不明白从末尾扫描的优势,如果中间夹杂着不合法字符怎么办?比如字符串 "13579" 转换数字:
13579 => sum = sum * 10 + ('1' - '0'); 
^
13579 => sum = sum * 10 + ('3' - '0'); 
 ^
13579 => sum = sum * 10 + ('5' - '0'); 
  ^
13579 => sum = sum * 10 + ('7' - '0'); 
   ^
13579 => sum = sum * 10 + ('9' - '0'); 
    ^
这种情况的话,从做到右扫描,遇到第一个不合法字符即可直接终止计算。
qq_33894340 2018-01-03
  • 打赏
  • 举报
回复
这个c 币怎么赚的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧