c 编译错误,请高手纠错。

#include<stdio.h>
#include<math.h>
int main(){
    int i,t,a,k;
    scanf("%d",&i);
    i=fabs(i);
    a=1,t=11,k=0;
   while(t>=10){
    t=i/a;a=a*10;k=k+1; };
   printf("%d",k);
} 

错误提示: [Error] ld returned 1 exit status

哪里出问题了呢?

阅读 4.3k
7 个回答

1.code error

while(t>=10){
    t=i/a;a=a*10;k=k+1; };

delete the semicolon after brace.
2. link to math lib.
gcc a.c -lm

不是return 0的问题。ld returned 1 exit status意思是连接器返回码为1,表示连接的时候出错了。具体什么错误因为你的编译器没有说所以不知道,但应该是顶上的两个库找不到,试试在编译选项中指定一下路径

  1. ld 的错误是 链接错误,把 编译错误链接错误 分清楚很重要。
  2. 注意代码格式排版,不然很难看明白。
  3. 整数绝对值用 abs,浮点数才用 fabs
  4. 编译链接时加上 -lm 开关以使用数学库。
  5. 提供你的开发环境信息,操作系统,编译器,生成命令行等,越详细越好。

你这个问题估计高手就不会理睬的。。。代码太乱了,你想做什么功能呢?如果是验证是几位数就这个代码吧:

int test(int n)
{
    int count = 0;
    while(n > 0)
    {
        n = n / 10;
        count += 1;
    }
    return count;
}

fbs()函数的参数是浮点型,这个可能和编译器有关,最后return 0;试一下

codepad通过了,输出了1

不知道你的编译环境怎么了。试一试return 0;

还有个小建议,int取绝对值用abs就可以了,没必要转成float用fabs,虽然也能编译过。

编译连接参数加-lm

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进