所以我试着做这个挑战:
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);

09-11 20:18