所以我试着做这个挑战:
http://www.reddit.com/r/dailyprogrammer/comments/1sob1e/121113_challenge_144_easy_nuts_bolts/
我想用一个文本文件作为输入。
如果我将正在使用的单独函数的内容复制到main中,那么我拥有的代码就可以工作,但如果不是这样,它似乎在调用readall或compare函数之后不会运行任何东西以下是我目前掌握的情况:
#include<stdio.h>
#include<stdlib.h>
//variable declarations
int i;
int n;
struct item *prices;
//function declarations
void readall();
int compare(int i);
int fail();
//structure definitions
struct item{
char *name;
int price;
};
//main
int main(int argc,char *argv[]){
if(fail()){
printf("Input not found\n");
return 1;
}
else{
readall();
for(i=0;i<n-1;i++){
if(compare(i)){
printf("%s\n",prices[i].name); //not added price change yet
}
}
}
free(prices);
return 0;
}
//functions
void readall(){
FILE *input = fopen("input.txt","r");
int n=0;
fscanf(input,"%u",&n);
struct item prices[2*n-1];
malloc(sizeof(prices));
for(i=0;i<2*n;i++){
fscanf(input,"%ms",&prices[i].name);
fscanf(input,"%u",&prices[i].price);
}
fclose(input);
}
int fail(){
FILE *input = fopen("input.txt","r");
fclose(input);
if(input==NULL){
return 1;
}
else{
return 0;
}
}
int compare(int i){
if(prices[i].price==prices[i+n].price){
return 1;
}
else{
return 0;
}
return 2;
}
另一方面,在瓦尔格林的指导下,我可以看到我显然没有正确地处理记忆,因此任何关于这方面的提示和/或任何其他建设性的批评都将受到赞赏。
最佳答案
你的readall函数是错误的你要做的是在堆栈上创建一个数组,然后在堆上创建一个单独的数组,这个数组没有名字,因此永远不会被使用和泄漏。试用
Prices = malloc(sizeof(item) * n);