pregnant 发表于 2021-5-8 18:43:36

请教关于c语言第六课的一个问题

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

int main()
{
      unsigned long long sum ;//本来在这里赋初值
      unsigned long long temp;
      unsigned long long weight;
                sum = 0;                   //但现在在这里赋初值,为什么会错误
      int i;

      for (i=0; i < 64; i++)
      {
                temp = pow(2, i);
                sum = sum + temp;
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);
                getchar();
      return 0;
}

以上程序在“unsigned long long sum”定义变量的同时赋初值即“unsigned long long sum=0”,并且去掉sum=0那一行就成功执行。但如果像上面那样编译就报错,这是为什么呢,我用的是studio 2010,难道是编译器问题吗

网瘾少年出门了 发表于 2021-5-8 18:45:33

sum没声明类型吧

pregnant 发表于 2021-5-8 18:48:36

网瘾少年出门了 发表于 2021-5-8 18:45
sum没声明类型吧

声明啦,unsigned long long sum不是声明吗

王逗比666 发表于 2021-5-8 19:14:13

我复制了你的代码但是没有报错,如果你用的是gcc的话是不是没在编译的时候加-lm

王逗比666 发表于 2021-5-8 19:16:52

没有看到是vs2010,你可以看下这个对你有没有帮助http://blog.sina.com.cn/s/blog_d796a5b70102vd7q.html

人造人 发表于 2021-5-8 19:51:35

我猜你用的是 vc6 ?

pregnant 发表于 2021-5-8 20:02:15

王逗比666 发表于 2021-5-8 19:16
没有看到是vs2010,你可以看下这个对你有没有帮助http://blog.sina.com.cn/s/blog_d796a5b70102vd7q.html

看了,也强制转换了,但有出现新的问题,估计是编译器问题,我还一个试试

pregnant 发表于 2021-5-8 20:02:53

人造人 发表于 2021-5-8 19:51
我猜你用的是 vc6 ?

是vs2010,有关系吗

人造人 发表于 2021-5-8 20:05:58

pregnant 发表于 2021-5-8 20:02
是vs2010,有关系吗

截图看看

pregnant 发表于 2021-5-8 20:27:45

人造人 发表于 2021-5-8 20:05
截图看看

虽然它说是类型错误,可能丢失数据,但就算强制转换,它又会说"i"未定义,总之就是各种错误。但只要把sum=0;那一行删去就编译成功了

人造人 发表于 2021-5-8 20:32:18

pregnant 发表于 2021-5-8 20:27
虽然它说是类型错误,可能丢失数据,但就算强制转换,它又会说"i"未定义,总之就是各种错误。但只要把sum ...

不是这个,错误信息在上面,把完整的输出复制一下,贴上来

pregnant 发表于 2021-5-8 20:37:11

人造人 发表于 2021-5-8 20:32
不是这个,错误信息在上面,把完整的输出复制一下,贴上来

这个吗

人造人 发表于 2021-5-8 20:43:52

pregnant 发表于 2021-5-8 20:37
这个吗

对,是这个
把35行和36行调换一下位置看看
#include <stdio.h>
#include <math.h>

int main()
{
      unsigned long long sum ;//本来在这里赋初值
      unsigned long long temp;
      unsigned long long weight;
      int i;
      sum = 0;                   //但现在在这里赋初值,为什么会错误

      for (i=0; i < 64; i++)
      {
                temp = pow(2, i);
                sum = sum + temp;
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);
                getchar();
      return 0;
}

pregnant 发表于 2021-5-8 20:48:06

人造人 发表于 2021-5-8 20:43
对,是这个
把35行和36行调换一下位置看看

竟然神奇的编译成功了,请问是为什么

pregnant 发表于 2021-5-8 20:50:27

人造人 发表于 2021-5-8 20:43
对,是这个
把35行和36行调换一下位置看看

难道声明还要放在一起?

害羞的新手 发表于 2021-5-8 20:58:46

好神奇的错误
我用Dvc++没错误
编译器的锅吧

pregnant 发表于 2021-5-8 21:01:52

害羞的新手 发表于 2021-5-8 20:58
好神奇的错误
我用Dvc++没错误
编译器的锅吧

我也不想用这个的,学校考试要用

人造人 发表于 2021-5-8 21:01:57

pregnant 发表于 2021-5-8 20:50
难道声明还要放在一起?

你的编译器太老了,定义变量必须放在函数的开头

人造人 发表于 2021-5-8 21:02:58

pregnant 发表于 2021-5-8 20:50
难道声明还要放在一起?

对于你目前的这个编译器来说却是这样的,而且要放在函数的最前面

pregnant 发表于 2021-5-8 21:05:00

人造人 发表于 2021-5-8 21:01
你的编译器太老了,定义变量必须放在函数的开头

明白,非常感谢
页: [1]
查看完整版本: 请教关于c语言第六课的一个问题