[英]how to solve undefined reference error in C?
我是C語言編程和K&R C編程語言書籍的新手。 我正在嘗試編寫一個程序,將十六進制數反復轉換為十進制數,並想在我的代碼中使用一個函數。 有一些問題使我無法理解C。我已經閱讀了有關它們的內容,但不清楚。
我想讀取最大長度為4的輸入,但是據我了解,盡管char數組的長度為4,但scanf()並沒有限制長度。因此,我嘗試使用for循環消除非整數字符。 這個可以嗎? 從用戶那里獲取輸入的正確方法是什么? 我不想使用while((cr=getchar())!=EOF)
。
當我運行程序時,我收到一條錯誤消息:“對'convert'的未定義引用”。 我應該如何定義功能?
我使用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
}
這是無效的:
scanf("%c", input);
%c
格式說明符將只讀取一個字符。 如果要讀取字符串,則需要使用%s
。 另外,您應該在此字段上放置一個長度修飾符,以指定要讀取的最大字符數:
scanf("%4s", input);
您需要使input
一個元素,以便為終止的空字節留出空間。
另外,您試圖在main
函數中定義您的convert
函數。 標准C不支持嵌套函數。
您需要將convert
的定義移到main
之外:
int convert (char hex[]);
int result,validLength,j;
char input[LENGTH+1];
int convert(char hex[]){
int t;
for(t=0; t < validLength; t++)
result= result+ hex[t]*(pow(16,(validLength-t)));
return result;
}
int main(){
while(1){
printf("Please enter valid hexadecimal number %d length:",LENGTH);
scanf("%4s", input); //reading to char array
// initialize validLength, otherwise you increment an uninitialized value
validLength = 0;
for(j=0;j<LENGTH;j++) // buffer
if(input[j] > 48 && input[j] < 58)
validLength++;
// null terminate after the invalid characters
input[validLength] = 0;
printf("Here is the decimal result: %d", convert(input));
validLength=0;
}
return 0;
}
您已經在main函數內部定義了convert
將其移至外部並修復了錯誤。
另外,為了存儲長度為4的scanf
結果,您的input
應為5,因為所謂的C字符串以NULL終止。 (例如,當您輸入A0CD時,輸入中的值將為{'A', '0', 'C', 'D', 0}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.