该程序的目的是获取包含数字和空格的字符串作为输入,然后使用strtok拆分该字符串并将每个数字插入数组。最后,我从数组中将数字发送到函数checkPowerOfTwo,该函数确定数字是否为2的幂,并使用计算结果打印一个字符串。
警告说: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;
}
我试图在两个sscanf行中使用强制转换为(int),但警告仍然存在。
这里是从字符串中提取未知数量整数的示例。
它不使用strtok
,但通过将缓冲区指针前进到成功扫描的每个项目之后来工作。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main (void)
{
char input[256];
puts("Enter some numbers on one line:");
if(fgets(input, sizeof input, stdin) == NULL) {
puts("Error in input");
exit(1);
}
int num;
int len;
char *buf = input;
puts("The numbers are:");
while(sscanf(buf, "%d%n", &num, &len) == 1) {
if(!isspace(buf[len])) {
puts("Error in input");
exit(1);
}
printf("num=%d\n", num);
buf += len;
}
}
计划会议:
在一行上输入一些数字:123456789这些数字是:num = 123num = 456num = 789在一行上输入一些数字:123a 456这些数字是:输入错误