c - 如何解决C中的 undefined reference 错误?

标签 c function scanf

我对 C 编程非常陌生,正在学习 K&R C 编程语言书籍。我正在尝试编写一个程序,将十六进制数重复转换为十进制数,并希望在我的代码中使用一个函数。有一些问题阻碍我理解 C。我读过它们,但还不清楚。

我想读取长度最大为4的输入,但据我了解,尽管char数组的长度是4,但scanf()并不限制长度。所以我尝试用for循环消除非整数字符。这个可以吗?获取用户输入的正确方法是什么?我不想使用 while((cr=getchar())!=EOF)

当我运行程序时,我收到一条错误消息:“未定义对‘转换’的引用”。我应该如何定义函数?

我使用 Code::Blocks 16.01 和 MinGW。

这是我的尝试:

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

#define LENGTH 4

int convert (char hex[]);
int result,validLength,j;
char input[LENGTH];

int main(){

    while(1){

        printf("Please enter valid hexadecimal number %d length:",LENGTH);
        scanf("%c", input);  //reading to char array

        for(j=0;j<LENGTH;j++)   // buffer
            if(input[j] > 48 && input[j] < 58)
                validLength++; 


        printf("Here is the decimal result: %d", convert(input[validLength]));

        validLength=0;

    }

    int convert(char hex[]){

        int t;

        for(t=0; t < validLength; t++)
            result= result+ hex[t]*(pow(16,(validLength-t)));

        return result;

    }

    return 0;
}

最佳答案

1] 你不能有嵌套函数。将其移出体外。

2]这里

printf("Here is the decimal result: %d", convert(input[validLength]));

您传递的是 char,但 convert 函数期望的是 char*。正确:

printf("Here is the decimal result: %d", convert(input));

3] %c 说明符用于字符,使用 %s 以及读取多少个字符 %4s 更好。不要忘记检查返回值,例如

if(scanf("%4s", input) != 1)
{
    // Fail
}

关于c - 如何解决C中的 undefined reference 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597246/

相关文章:

c - 从字符串错误中提取字符

c - 带冒号的 fscanf ( :) delimited data

c - 使用套接字将数据包发送到另一个子网/网络

php - __construct 和与类同名的函数有什么区别?

c - 操作系统开发捷径

javascript - 简单的功能给出意想不到的结果

javascript - 能够获取元素长度但不能获取 innerHTML

c - scanf函数和EINTR信号

c++ - 在 C/C++ 中,反转字节中位顺序的最简单方法是什么?

c - 尝试通过 C 中的运动学创建垂直运动