| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 470 人关注过本帖
标题:C Primer Plus第九章的第九题(关于将任意整数变为任意进制下数值)
只看楼主 加入收藏
graigcxz
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2014-1-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
C Primer Plus第九章的第九题(关于将任意整数变为任意进制下数值)
以下是我的代码
程序代码:
#include<stdio.h>
void to_base_n(unsigned long n,int p);

int main(void)
{
   unsigned long number;
   int base;
   
   printf("Enter an integer and the style you want to transform(q to quit):");
   while(scanf("%d,%d",&number,&base)==2)
   {
      printf("result equivalent:");
      to_base_n(number,base);
      putchar('\n');
      printf("Enter an integer and the style you want to transform(q to quit):");
   }
   printf("Done.\n");
   getchar();
   getchar();
   return 0;
}

void to_base_n(unsigned long n,int p)
{
   int r;
   
   r=n%p;
   if(n>=2)
      to_base_n(n/p,p);
   putchar('0'+r);
   
   return;
}

有一个小问题就是我的number定义的是unsigned long,但是在scanf()读入的时候如果写成scanf("%ul,%d",&number,&base)==2那么就会不进入循环直接打印Done结束程序。
如果写成scanf("%d,%d",&number,&base)==2则会正常运行,为什么呢?
搜索更多相关主题的帖子: number Enter style 
2014-02-06 22:15
Copain
Rank: 2
等 级:论坛游民
帖 子:10
专家分:69
注 册:2014-1-31
收藏
得分:0 
unsigned long的转换说明符为%lu   
2014-02-07 11:04
graigcxz
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2014-1-14
收藏
得分:0 
回复 2楼 Copain
是,但是本书上有一个例题,代码如下,写的就是while(scanf("%ul",&number)==1),而且我经过编译以后发现没有任何问题。那么这又是为什么呢?
程序代码:
#include<stdio.h>
void to_binary(unsigned long n);

int main(void)
{
   unsigned long number;
   
   printf("Enter an integer(q to quit):");
   while(scanf("%ul",&number)==1)
   {
      printf("Binary equivalent:");
      to_binary(number);
      putchar('\n');
      printf("Enter an integer(q to quit):");
   }
   printf("Done.\n");
   getchar();
   return 0;
}

void to_binary(unsigned long n)
{
   int r;
   
   r=n%2;
   if(n>=2)
      to_binary(n/2);
   putchar('0'+r);
   
   return;
}
2014-02-07 15:41
Copain
Rank: 2
等 级:论坛游民
帖 子:10
专家分:69
注 册:2014-1-31
收藏
得分:20 
回复 3楼 graigcxz
"%ul"程序理解为"%u"  加上 字符‘l’所以编译没有问题。写成scanf("%ul,%d",&number,&base)==2时,再输入是保持一致性,如 3l,4 便能得出与使用scanf("%lu,%d",&number,&base)==2一样的效果……至于你所举得例子应该是书中出错了(个人理解)
2014-02-08 10:52
graigcxz
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2014-1-14
收藏
得分:0 
回复 4楼 Copain
这个回答基本同意,谢谢了
2014-02-08 15:42
快速回复:C Primer Plus第九章的第九题(关于将任意整数变为任意进制下数值)
数据加载中...
 
   



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

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