Moze biti bas svasta u pitanju... Trebalo je da nam posaljes gresku koju javlja kompajler/linker...
Primecujem gresku u "void insert(tree* tr,float data)" liniji. Druga "greska" je u void main() - prema standardu main() treba da vraca celobrojnu vrednost (int)...
Ako se kod posalje na forum u malo boljem izdanju (nazubljen) onda se mozda vide i neke druge potencijalne greske.
Code:
#include <stdio.h>
#include <stdlib.h>
struct tree {
float value;
struct tree *left;
struct tree *right;
};
void insert( struct tree* tr, float data )
{
if ( tr == NULL ) {
struct tree * New = ( struct tree * ) malloc ( sizeof ( struct tree ) );
New->value = data;
New->left = NULL;
New->right = NULL;
tr = New;
} else {
if ( data < tr->value )
insert ( tr->left, data );
else
insert ( tr->right, data );
}
}
void FileToTree( struct tree **tr, char *FileName )
{
FILE *fp;
int m, n, i, j;
float a;
if ( ( fp = fopen ( FileName, "r" ) ) == NULL ) {
printf ( "datoteka se ne moze otvoriti!\n" );
return ;
} else {
fscanf ( fp, "%d", &m );
fscanf ( fp, "%d", &n );
while ( !feof ( fp ) ) {
for ( i = 0; i < m; i++ )
for ( j = 0; j < n; j++ ) {
fscanf ( fp, "%f", &a );
insert ( *tr, a );
}
}
}
fclose ( fp );
}
void inorder ( struct tree *tr )
{
if ( tr != NULL ) {
inorder ( tr->left );
printf ( "%f ", tr->value );
inorder ( tr->right );
}
}
int main()
{
char * FileName = "Matrix.txt";
struct tree *tr = ( struct tree * ) malloc ( sizeof ( struct tree ) );
FileToTree ( &tr, FileName );
inorder ( tr );
}
Jedna od mogucih gresaka je da u direktorijumu gde je izvrsni fajl nemas Matrix.txt fajl. Takodje, ako ovaj program koristis na UNIX masinama, onda treba da primetis da imas veliko slovo na pocetku. UNIX nije Windows, tamo se pravi razlika izmedju velikih i malih slova, te "Matrix.txt" nije isto sto i "matrix.txt" ...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin