| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4116 人关注过本帖
标题:如何实现从键盘输入二进制代码字符串
只看楼主 加入收藏
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
收藏
得分:7 
你的程序怎么写的?
程序代码:
#include<stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

main()
{
    char s[33];                /*待转二进制字符串,也是要变为手动键盘输入的部分*/

    char *p=s ;
    
    int i, j, n = 0;    
    
    gets(s);
    
    j = strlen(s);                              /*求出二进制位数*/

    printf("%d位二进制数\t",j);

    puts(s);    
    
    for (i = 0;i < j;i++)
    {        
        if(*(p + i) == '1')                     /*判断某一位是否为'1'*/
        {
            n=n + pow(2.0,j - 1 - i);           /*求相应十进制的值*/
        }
    }    
    printf("转为十进制后,值为:%d\n",n);
    
}
收到的鲜花
  • sky85582018-03-09 11:09 送鲜花  3朵   附言:我很赞同
2018-03-08 18:02
Jeyyion_han
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:207
专家分:301
注 册:2018-1-22
收藏
得分:0 
回复 10楼 吹水佬
if(*(p + i) == '1')  
他这个写的也没毛病呀,但是为什么会报错?
我现在是没有运行环境
2018-03-08 19:02
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 10楼 吹水佬
/* 不能完全看明白,如方便请详注一下 谢了!*/

程序代码:
#include <stdio.h>
#include <string.h>

int bin_dec(char *bin)                   /* 自定义函数形参为字符指针bin */
{
    int i, dec=0;
    char *p = bin+strlen(bin)-1;         /* 此处完全不明白 */
    for (i=0; p>=bin; --p, ++i)          /* p>=bin;何解? */
    {
        if (*p=='1')
            dec += 1<<i;                 /* 左移相当于乘2的i次方,求取十进制值 */
    }
    return dec;
}

main()
{
    char s[33]; //32位
    printf("二进制数: ");
    gets(s);
    printf("转为十进制后,值为:%d\n", bin_dec(s));
}
2018-03-09 09:40
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 11楼 李晨经纪人
编译通过,调试过程中的程序没留,学了你的程序后感觉是细节上出了什么问题,受思维定式影响一直没觉察出来吧。多谢!
2018-03-09 10:21
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 2楼 Jeyyion_han
/* 改成这样程序顺利编译通过,问题出在i,j,n等变量定义位置上,还有原来的程序*s是空指针,调用时会报错!*/
/* 多谢提供的帮助 */

程序代码:
#include<stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

main()
{
    //char s[]="0000000011111111";                
    int i, j, n = 0;                                /*  定义变量放在表达式下面会出错!必须放在主程序最上面 */
    char *s,*p, a[33];
    s=a;                                            /* 指针不能为空 */
    p=a;
    printf("enter string:\n");
    gets(s);           
    
    j = strlen(s);                              
    
    printf("%d位二进制\t",j);
    
    puts(s);    
    
    for (i = 0;i < j;i++)
    {        
        if(*(p + i) == '1')                     
        {
            n=n + pow(2.0,j - 1 - i);           
        }
    }    
    printf("转十进制值为:%d\n",n);
    
}
2018-03-09 10:35
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10610
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 13楼 sky8558
    char *p = bin+strlen(bin)-1;         /* 此处完全不明白 */   p指向最右边字符
    for (i=0; p>=bin; --p, ++i)          /* p>=bin;何解? */    p从右到左遍历字串
2018-03-09 10:37
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 11楼 李晨经纪人
经过大伙帮助分析,问题已确定,主要有以下几条:
VC6中,定义变量必须放在所有表达式之前,否则报错,本题因此原因报i,n,k定义错误!
指针定义后,须指向目标变量,不能用空指针通过scanf或gets赋值;
按编程标准结构写程序,不要偿试那怕是一个顺序的更改。

/* Thanks for everyone share! */
2018-03-09 10:44
快速回复:如何实现从键盘输入二进制代码字符串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019345 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved