我正在尝试将用户输入的至少17
字符转换为数组。比如说,用户的输入是25281582252
,通过使用x = arr[1]
,5
被分配给变量x
。我还没有成功。我得到一个"undefined reference to log10"
与gcc
Linux上。这是我的代码
#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;
}
提前致谢
我得到一个
"undefined reference to log10"
您需要使用-lm
.
但这只是一个开始。修复以下问题:
a) 如果您希望字符串正确终止,则为空字符串终止符分配额外的字符。
b)scanf("%d",x);
需要指向x
c)int
变量不能存储17
数字,使用long int
d) 您不能存储int
到 char 中array
,您的数字必须转换为ASCII
char。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句