| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1394 人关注过本帖, 1 人收藏
标题:C语言菜鸟,一道简单题实在没辙了,求高手帮忙找出错误。。
只看楼主 加入收藏
gao16forever
Rank: 2
等 级:论坛游民
帖 子:32
专家分:29
注 册:2011-11-29
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:11 
C语言菜鸟,一道简单题实在没辙了,求高手帮忙找出错误。。
题目:
Description
假定你从任何设备读二进制数据流,它代表IP地址,你的任务是转化一个32位的二进制数,变成一个由点分隔开的十进制数。这个32为的IP地址被分为4组,每组代表一个十进制数(0-255) 对应的关系如下:

Input
第一行输入包含一个数字n(1<=n<=100),表示要输入几个二进制数,下面就是需要转化的数

Output
输出必须包含对应的n个IP地址

Sample Input
2
00000000000000000000000000000000
11111111111111111111111111111111
Sample Output
0.0.0.0
255.255.255.255
我的程序:
#include<stdio.h>
#include<math.h>
void main()
{
    int n,i,j,k,a[4],d,t;
    char s[32];
    scanf("%d",&n);
    getchar();
    for (i=0;i<n;i++)
    {
    d=0;a[0]=0;a[1]=0;a[2]=0;a[3]=0;k=0;
    for (j=0;j<32;j++)
    scanf("%c",&s[j]);
    getchar();
    for (j=0;j<8;j++)
    {
    if (s[j+d*8]=='1') t=pow(2,j);
    else t=0;
    a[d]=t+a[d];
    if (j==7)  {j=-1;d++;}
    k++;
    if (k==32) break;
    }
    printf("%d.%d.%d.%d\n",a[0],a[1],a[2],a[3]);
    }
}
看了好几个小时了,就是不知道错在哪里。。。
搜索更多相关主题的帖子: include IP地址 二进制 C语言 十进制 
2011-11-29 13:37
丹姿儿
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2011-11-29
收藏
得分:3 
第一个for循环中n没有赋初值
2011-11-29 13:43
gao16forever
Rank: 2
等 级:论坛游民
帖 子:32
专家分:29
注 册:2011-11-29
收藏
得分:0 
不会啊。不是在上面scanf("%d",&n);读取过了吗?
2011-11-29 13:58
丹姿儿
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2011-11-29
收藏
得分:0 
17行改为:if (s[j+d*8]=='1') t=(int)pow(2,7-j);
还有main 函数返回值应该为int把?
2011-11-29 14:08
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:3 
我写的,看看吧
程序代码:
#include <stdio.h>
#include <string.h>
main()
{
    int i,j,k,n,c,a[4]={0};
    char s[33];
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        k=0;a[0]=0;a[1]=0;a[2]=0;a[3]=0;        
        printf("请输入数据:");
        gets(s);
        c=strlen(s);
        for(i=0;i<c;i=i+8)
        {
            for(j=i;j<i+8;j++)
            {
                if(s[j]=='\0') 
                    break;
                else 
                    a[k]=2*a[k]+(s[j]-48);
            }
            k++;
        }
        printf("%d.%d.%d.%d\n",a[0],a[1],a[2],a[3]);
    }

}


[ 本帖最后由 luchar 于 2011-11-29 15:32 编辑 ]
2011-11-29 15:22
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:3 
我的版本:

程序代码:
#include <stdio.h>
int main()
{
        char bin[33], *p;
        int n, result, time;
        scanf("%d", &n);
        while (n-- && scanf("%s", bin))
        {
                for (p= &bin[0]; p != &bin[32]; p += 8)
                {
                        if (p != &bin[0])
                        putchar('.');
                        for (result = 0, time = 0; time < 8; time++)
                                result += (*(p + time) - '0') * (1 << (7 - time));
                        printf("%d", result);
                }
                putchar('\n');
        }
        return 0;
}


[ 本帖最后由 thlgood 于 2011-11-29 17:30 编辑 ]

o(∩∩)Linux & Python 群:187367181
2011-11-29 17:21
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:3 
回复 4楼 丹姿儿
同意楼上。。。。。这是不过楼上第三个程序错了,,(运行时发现)
2011-11-29 17:55
gao16forever
Rank: 2
等 级:论坛游民
帖 子:32
专家分:29
注 册:2011-11-29
收藏
得分:0 
回复 4楼 丹姿儿
我用void 就是无返回值,直接打印输出了结果,用int返回值有什么用呢(我对返回值一直不是很理解,return 0 是指函数最终结果返回到0?),谢谢,还有就是前面pow之前加int ??我也不是很理解。。
2011-11-30 00:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
这里用联合是最合适的。
程序代码:
#include<stdio.h>
typedef union{
    unsigned int ip_int;
    unsigned char ip_byte[4];
}IP;
int main()
{
    int n, i, b;
    IP ip;
    scanf("%d", &n);
    while(n--)
    {
        ip.ip_int = 0;
        for(i = 0; i < 32; i++)
        {
            scanf("%1d", &b);
            ip.ip_int <<= 1;
            ip.ip_int += b;
        }
        printf("%d.%d.%d.%d\n", ip.ip_byte[3], ip.ip_byte[2], ip.ip_byte[1], ip.ip_byte[0]);
    }
    return 0;
}

重剑无锋,大巧不工
2011-11-30 12:58
gao16forever
Rank: 2
等 级:论坛游民
帖 子:32
专家分:29
注 册:2011-11-29
收藏
得分:0 
回复 9楼 beyondyf
我最近也刚学到结构,结构就是让数据之间的联系更紧密,书上是这么说,但是我没怎么感觉出来结构与非结构的区别啊,能讲一下吗?。。谢谢了
2011-11-30 14:23
快速回复:C语言菜鸟,一道简单题实在没辙了,求高手帮忙找出错误。。
数据加载中...
 
   



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

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