| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4078 人关注过本帖
标题:如何实现从键盘输入二进制代码字符串
取消只看楼主 加入收藏
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
如何实现从键盘输入二进制代码字符串
请教:在以下程序基本功能不变的情况下,如何实现手动输入二进制代码?

程序代码:
/* 二进制转十进制 */

#include<stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

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

    char *p = s;

    int i, j, n = 0;    

    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);
    
}


图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 输入 二进制 代码 字符串 include 
2018-03-08 15:52
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 2楼 Jeyyion_han
scanf||getchar我都试过了,用固定字符串没有问题,改为键盘输入就报错。
搞了一下午,没解决,倒是把以前不明白的其它问题弄明白了。我怀疑我的原程序设计结构有问题。

附:经你改过后的报错码

图片附件: 游客没有浏览图片的权限,请 登录注册


2018-03-08 16:34
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
程序代码:
/*与本题程序对应的另一个程序*/
/*十进制转二进制*/
#include <stdio.h>

main()
{
    int i, x, n, a[100];

    printf("input numbers:\n");

    scanf("%d", &x);                       /*这里可以键盘输入*/

    for (i=0 ;; i++)
    {
        a[i] = x % 2;

        x = x / 2;

        if (x == 0)
        {
            break;
        }
    }
    for (;i > -1; i--)
    {
        printf("%d",a[i]);
    }
    printf("\n");
}

/*给出这个程序是想说明你和我的输入函数使用上应该没错*/
/*上题键盘输入不是写不出,而是写了不可用(用各种方法写入过),一定有别的问题没注意到*/
/*也可能是我的程序设计最初思路就有问题*/
2018-03-08 16:55
sky8558
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-2-1
收藏
得分:0 
回复 7楼 Jeyyion_han
分号全改了一遍,报错一样。
2018-03-08 16:59
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
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.021699 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved