为了账号安全,请及时绑定邮箱和手机立即绑定

当输入的是2和2时输出的为啥不是4而是256呀

当输入的是2和2时输出的为啥不是4而是256呀

C
慕仰3175336 2016-09-24 20:09:54
#include <stdio.h>int main(){    int a,n,j;    printf("请输入两个数\n");    scanf("%d,%d\n",&n,&j);    if(j==0)    {        a=1;    }    else    {        a=pow (n,j);    }    printf("%d\n",a);    return 0;}
查看完整描述

4 回答

已采纳
?
Must_so

TA贡献11条经验 获得超18个赞

输入多了“,”和“\n”按你的代码要输入2,2\n才能匹配上

这样改:

#include <stdio.h>
#include <math.h>
int main()
{
    int a, n, j;
    printf ("请输入两个数\n");
    scanf ("%d%d", &n, &j);
    if (j == 0)
    {
        a = 1;
    }
    else
    {
        a = pow (n, j);
    }
    printf ("%d\n", a);
    return 0;
}

//img1.sycdn.imooc.com//57e6796d0001c14001840095.jpg



或者你自己的代码这样输入:

//img1.sycdn.imooc.com//57e67afa0001bbf101760093.jpg

至于为什么是256你可以输出n和j试试,不难发现你错误的输入使得j没有赋值,局部变量没有赋值会是随机值

我的电脑上j的随机值是34:

代码:

#include <stdio.h>
#include <math.h>
int main()
{
    int a, n, j;
    printf ("请输入两个数\n");
    scanf ("%d,%d\n", &n, &j);
    if (j == 0)
    {
        a = 1;
    }
    else
    {
        a = pow (n, j);
    }
    printf("n = %d , j = %d\n",n,j);//debug输出中间结果
    printf ("%d\n", a);
    return 0;
}

测试结果:

//img1.sycdn.imooc.com//57e67be500012bc801880129.jpg

另外注意pow的参数和返回值是double型,a,n,j是int型(有些算法竞赛中可能会CE)

scanf两个%d之间加空格是没有问题的

    scanf ("%d %d", &n,&j);

空格可以过滤空白字符

不加空格也可以,会自动根据输入的空格区分是两个数而不是一个数

查看完整回答
1 反对 回复 2016-09-24
?
onemoo

TA贡献883条经验 获得超454个赞

首先,使用scanf函数时,格式化列表的最后不要加上\n。

而且,你在scanf中指定的格式是 %d,%d,所以你输入的两个数之间也必须用逗号分开。 一般用在格式中用空格间隔就可以了,这样输入也方便。

还有,你使用了pow函数,但是并没有include math.h,这样应该根本编译不过的。

按照上面的改正后,应该就没问题了,至少在我这里测试时没有问题。

另外,在C中,你不需要main函数的参数的话,应该在括号中写上void,而不是留空。

查看完整回答
反对 回复 2016-09-24
  • 慕仰3175336
    慕仰3175336
    就是我在书上看的这个main函数里面是什么也不加的,这个加上void的是编译要求的吗?
  • onemoo
    onemoo
    C标准规定函数如果不需要参数,要在参数列表中写上void。 参数列表留空实际上表示可以“该函数接受任何参数”
?
皓韵儿

TA贡献86条经验 获得超114个赞

你能运行通过吗?pow 函数不是在#include <math.h> 中吗? 你写了吗?

查看完整回答
反对 回复 2016-09-24
  • 慕仰3175336
    慕仰3175336
    能,这个不需要这个数学函数吧,有可能其他的编译器需要吧
  • 4 回答
  • 0 关注
  • 1339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信