2017-10-09 98 views
-1

我想创建一个函数内部的结构,我正在尝试使用它。但是,当我比较结构中的两个值时,我收到以下消息:如何在C中定义和使用函数结构?

“C:\ Users \ hp \ Desktop \ prgm \ cap.c ||在函数'fnumber'中:| C:\ Users \ hp \ Desktop \ prgm \ cap.c |

72 | error:成员'f_value'的请求不是结构或联合| || ===构建失败:1个错误,0个警告(s )(0分钟0秒)=== |

这是我的代码: -

#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 

/* 
* Complete the function below. 
*/ 
int fnumber(long input1,int input2_size, int* input2) 
{ 
    int i, j, k, count[input2_size],temp=0; 
    int arr_temp[input2_size]; 
    struct smaller{ 
      int position; 
      int f_value;}; 

    struct smaller list[input2_size]; 
    struct smaller temp1; 
    memccpy(arr_temp, input2, input2_size,sizeof(int)); 
    for(i=0; i<input2_size;i++) 
    { 
     for(j=i+1; j<=input2_size;i++) 
     { 
      if(arr_temp[i]>arr_temp[j]) 
      { 
       temp=arr_temp[i]; 
       arr_temp[i]=arr_temp[j]; 
       arr_temp[j]=temp; 
      } 
     } 
    } 
    for(i=0; i<input2_size;i++) 
    { 
     if(i>1) 
     count[i]=input2[i]; 
     for(j=0;j<input2[i-1];j++) 
     { 
      count[i]+=arr_temp[j]; 
     } 
    } 
    /* for(i=0;i<input2_size-1;i++) 
    { 
     for(j=i+1;j<input2_size;j++) 
     { 
      if(count[i]>count[j]) 
      { 
      temp=count[i]; 
      count[i]=count[j]; 
      count[j] = temp; 
      } 
     } 

    }*/ 
    for(i=0,j=0;i<input2_size;i++) 
    { 
     if(count[i]<=input1) 
      continue; 
     else 
     { 
      list[j].position=i; 
      list[j].f_value=count[i]; 
      j++; 
     } 

    } 
    for(i=0;i<input2_size-1;i++) 
    { 
     for(j=i+1;j<input2_size;j++) 
     { 
      if(list[i].f_value>list[j.f_value]) 
      { 
       temp1=list[i]; 
       list[i]=list[j]; 
       list[j]=temp1; 
      } 
     } 
    } 
    return list[0].position; 

} 

int main() { 
int output = 0; 
long ip1; 
scanf("%ld", &ip1); 
int ip2_size = 0; 
int ip2_i; 
scanf("%d\n", &ip2_size); 
int ip2[ip2_size]; 
for(ip2_i = 0; ip2_i < ip2_size; ip2_i++) { 
    int ip2_item; 
    scanf("%d", &ip2_item); 

    ip2[ip2_i] = ip2_item; 
} 
output = fnumber(ip1,ip2_size,ip2); 
printf("%d\n", output); 
return 0; 
} 
+0

可能这里是你的错误,对吗? 'list [i] .f_value> list [j.f_value]' - >应该是'list [i] .f_value> list [j] .f_value' –

+0

哦,我明白了... thanx。我应该仔细地检查类型错误。 –

+0

修复这些问题后,程序崩溃了,有什么想法? –

回答

2
 if(list[i].f_value>list[j.f_value]) 

你拼写错误list[j].f_value as list[j.f_value]。另外,memccpy应该是memcpy

+0

修复这些问题后,程序崩溃了,有什么想法吗?请帮忙@melpomene –

+0

@SameerRezaKhan https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – melpomene