Цель программы - получить в качестве входных данных строку, содержащую числа и пробелы, затем разделить строку с помощью strtok и вставить каждое число в массив. Наконец, из массива я отправляю числа в функцию checkPowerOfTwo, которая определяет, является ли число степенью двойки, и выводит строку с вычислением.
Предупреждение гласит: passing argument 1 of 'sscanf' makes pointer from integer without a cast [-Wint-conversion]|
Предупреждение появляется в обеих строках, содержащих sscanf. Любые идеи о том, как я могу решить эти предупреждения? Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int checkPowerOfTwo(int x);
int main()
{
int exp,size,*numbers,sum=0;
char term,*str=NULL,*token;
printf("Enter size of input:");
if(scanf("%d%c", &size, &term) != 2 || term != '\n'){
printf("Invalid Size\n");
return 0;
} if(size<=0){
printf("Invalid size\n");
return 0;
} else{
numbers=(int*)malloc(size * sizeof(int));
str=(char*)malloc(sizeof(int)*(size+1) + (size-1)*sizeof(char));
if(numbers==NULL||str==NULL){
printf("Out of memory\n");
return 0;
} //else{
//printf("Memory allocated\n");
//}
printf("Enter numbers:");
fgets (str, sizeof(int)*(size+1) + (size-1), stdin);
//printf("%s",str);
token=strtok(str," ");
while(token!=NULL){
for(int i=0;i<size;i++){
//printf("%s\n",token);
numbers[i]=(int)token;
token=strtok(NULL," ");
}
}
}
for(int j =0;j<size;j++)
{
exp=checkPowerOfTwo(numbers[j]);
if (exp>=0){
int x;
sscanf((int)numbers[j],"%d",&x);
printf("The number %d is a power of 2: %d=2^%d\n",x,x,exp);
sum+=exp;
}
}
printf("Total exponent sum is %d",sum);
free(numbers);
free(str);
}
int checkPowerOfTwo(int n)
{
int x;
int exponent=0;
sscanf((int)n,"%d",&x);
//printf("checking number %d\n",x);
if (x==0){
return -1;
} if (x==1){
return 0;
}
while( x != 1)
{
if(x % 2 != 0){
return -1;
}
x /= 2;
exponent++;
}
return exponent;
}
Я пытался использовать приведение к (int) в обеих строках sscanf, но предупреждение остается.