我试图将用户输入的至少17
个字符转换为数组。例如,用户的输入为25281582252
,使用x = arr[1]
,5
被分配给变量x
。
我还没有成功。我在linux上获得"undefined reference to log10"
gcc
。这是我的代码
#include <stdio.h>
#include <math.h>
int main(){
int x;
printf("enter x");
scanf("%d",x);
int numOfDigits = log10(x) + 1;
char* arr = calloc(numOfDigits, sizeof(char));
for(int i=0;i<numOfDigits;i++,x/=10){
arr[i] = x % 10;
}
printf("first num: %d",arr[0]);
return 0;
}
提前致谢
答案 0 :(得分:0)
我得到
"undefined reference to log10"
您需要使用-lm
将程序与数学库相关联。
但这只是一个开始。修复以下问题:
a)如果希望正确终止字符串,则为空字符串终止符分配额外字符。
b)scanf("%d",x);
需要指向x
c)int
变量无法存储17
个数字,请使用long int
d)您无法将int
存储到char array
中,您的数字必须转换为ASCII
字符。
f)你的算法以相反的顺序存储字符,你需要反转你的字符串
e)必须释放分配的内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void reverse_in_place(char * str, size_t len) {
size_t i, j;
for (i = 0, j = len - 1; i < j ; i++, j--) {
char a = str[i];
char z = str[j];
str[i] = z;
str[j] = a;
}
}
int main(void){
long int x;
int i;
printf("enter x:\n");
scanf("%ld",&x);
int numOfDigits = (int) (log10(x) + 1);
printf("numOfDigits = %d\n", numOfDigits);
char* arr = calloc(numOfDigits + 1, 1);
for(i=0; i < numOfDigits; i++){
arr[i] = (char) ((x % 10) + '0');
printf(" %c", arr[i]);
x /= 10;
}
reverse_in_place(arr,strlen(arr));
printf("\nFirst num is: %c in string %s",arr[0], arr);
free(arr);
return 0;
}
输出:
enter x:
451236789012345678
numOfDigits = 18
8 7 6 5 4 3 2 1 0 9 8 7 6 3 2 1 5 4
First num is: 4 in string 451236789012345678