问个菜菜的问题,看看是不是变量类型的问题

C、C++和Java语言
回复
头像
arsui
帖子: 889
注册时间: 2007-05-06 2:01
来自: 特麓村->浦北->五山->罗湖
送出感谢: 0
接收感谢: 0
联系:

问个菜菜的问题,看看是不是变量类型的问题

#1

帖子 arsui » 2007-12-28 15:01

代码: 全选

#include<stdio.h>
long int fac(int n)
	{if (n==1) return 1L;
	else return n*fac(n-1);
	}
void main()
	{int i,m;
	printf("Please input a number:");
	scanf("%d",&m);
	for (i=1;i<=m;i=i+1)
		{
		printf("%d!=%d\n",i,fac(i));
		}
	}
为什么结果是这样的?是不是变量类型的问题
附件
c.gif
c.gif (1.15 KiB) 查看 590 次
Ubuntu 9.04 & Win Xp
------------------------------------------------------
Company: http://www.mazingtech.com
HomePage: http://www.arsui.com
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
送出感谢: 0
接收感谢: 2 次
联系:

#2

帖子 dbzhang800 » 2007-12-28 15:07

代码: 全选

#include<stdio.h>

long int fac(int n)
{
    if (n==1)
        return 1L;
    else
        return n*fac(n-1);
}
int main()
{
    int i,m;
    printf("Please input a number:");
    scanf("%d",&m);
    for (i=1;i<=m;i=i+1)
    {
        printf("%d!=%ld\n",i,fac(i));                 
    }
    return 0;
}
1主要是你的 printf中,long对应 %ld

题外话:
2.编译程序时要加 -Wall 选项
3.找本好点的书看,至少要main前面有个int的
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

#3

帖子 bones7456 » 2007-12-28 15:34

dbzhang800 写了:

代码: 全选

#include<stdio.h>

long int fac(int n)
{
    if (n==1)
        return 1L;
    else
        return n*fac(n-1);
}
int main()
{
    int i,m;
    printf("Please input a number:");
    scanf("%d",&m);
    for (i=1;i<=m;i=i+1)
    {
        printf("%d!=%ld\n",i,fac(i));                 
    }
    return 0;
}
1主要是你的 printf中,long对应 %ld

题外话:
2.编译程序时要加 -Wall 选项
3.找本好点的书看,至少要main前面有个int的
赞~
关注我的blog: ε==3
头像
晶晶守护神
帖子: 705
注册时间: 2007-12-02 14:09
送出感谢: 0
接收感谢: 0

#4

帖子 晶晶守护神 » 2007-12-28 15:48

%d的问题 自己看看print
悟以往之不鉴,知来者之可追
识迷途其未远 觉今是而昨非
头像
arsui
帖子: 889
注册时间: 2007-05-06 2:01
来自: 特麓村->浦北->五山->罗湖
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 arsui » 2007-12-28 22:58

嘎嘎~
谢谢楼上诸位~
Ubuntu 9.04 & Win Xp
------------------------------------------------------
Company: http://www.mazingtech.com
HomePage: http://www.arsui.com
wangqi0021
帖子: 156
注册时间: 2007-09-05 1:09
来自: beijing
送出感谢: 0
接收感谢: 0

#6

帖子 wangqi0021 » 2007-12-29 20:27

......................................................

代码: 全选

#include<stdio.h>
long int fac(int n)
   {if (n==1) return 1L;
   else return n*fac(n-1);
   }
void main()
   {int i,m;
   printf("Please input a number:");
   scanf("%d",&m);
   for (i=1;i<=m;i=i+1)
      {
      printf("%d!=%d\n",i,fac(i));
      }
   }
朋友用scanf别忘记加if判断一下,最好形成习惯.再用errno.h里的 perror()输出报错.
再把0 -1 都定义成宏.从开始就养成这样的习惯.当代码量大了之后,你那种写法只会给你带来无穷无尽的噩梦.

这样写

代码: 全选

if(!scanf()){
      perror("scanf()");
      exit(ERROR);
}
头像
arsui
帖子: 889
注册时间: 2007-05-06 2:01
来自: 特麓村->浦北->五山->罗湖
送出感谢: 0
接收感谢: 0
联系:

#7

帖子 arsui » 2007-12-30 21:41

谢谢ls~,

代码: 全选

#include<stdio.h>
#include<errno.h>

long int fac(int n)
{
    if (n==1)
        return 1L;
    else
        return n*fac(n-1);
}
int main()
{
    int i,m;
    printf("Please input a number:");
    scanf("%d",&m);
        if (!scanf()){
                perror("scanf()");
                exit(ERROR);
                }
    for (i=1;i<=m;i=i+1)
    {
        printf("%d!=%ld\n",i,fac(i));
    }
    return 0;
}
你是说这样?
编译不成功哇~
Ubuntu 9.04 & Win Xp
------------------------------------------------------
Company: http://www.mazingtech.com
HomePage: http://www.arsui.com
头像
wth123456
帖子: 234
注册时间: 2006-12-07 17:32
送出感谢: 0
接收感谢: 0

#8

帖子 wth123456 » 2007-12-30 21:57

我学第一本C的书就是void main的。 :em25
十年磨一剑,霜刃未曾试。今日把示君,谁有不平事?
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
送出感谢: 0
接收感谢: 2 次
联系:

#9

帖子 dbzhang800 » 2008-01-01 11:25

arsui 写了:谢谢ls~,

代码: 全选

#include<stdio.h>
#include<errno.h>

long int fac(int n)
{
    if (n==1)
        return 1L;
    else
        return n*fac(n-1);
}
int main()
{
    int i,m;
    printf("Please input a number:");
[color=red]    scanf("%d",&m);
        if (!scanf()){
                perror("scanf()");
                exit(ERROR);
                }[/color]
    for (i=1;i<=m;i=i+1)
    {
        printf("%d!=%ld\n",i,fac(i));
    }
    return 0;
}
你是说这样?
编译不成功哇~
这样是不行的,他的意思是 每次用scanf的时候,都要检查它的返回值。

代码: 全选

if(!scanf("%d",&m))
{
  printf("Error: -------");
  exit(1);
}
回复

回到 “C/C++/Java”