does any one know how to solve?


 
Thread Tools Search this Thread
Top Forums Programming does any one know how to solve?
# 1  
Old 08-20-2008
does any one know how to solve?

Hello experts,
Here is my code.I can create the database.But I also want it to see standard output.Please see the blocked code.If i use them they show me weired symbols.
Code:
#include <stdio.h>
#include <stdlib.h>

struct date {
    int month;
    int day;
    int year;
    };
struct empRec{
    char name[25];
    char room[10];
    int jobLevel;
    struct date startDate;
    };
int main(){
    FILE *data;
    static struct empRec employee[1000]={
                {"Peter North","4B-208",35400,{10,11,1983}}
               
            };

    int entries=6;
    if((data=fopen("database","w"))==NULL){
                fprintf(stderr,"Can't Create database\n");
                exit(1);
                }
    if(fwrite(employee,sizeof(struct empRec),entries,data)!=entries){
                fprintf(stderr,"WRITE ERROR\n");
                exit(1);
                }
    
    /*char buf[1024];
    rewind(data);
    fread(buf,sizeof(struct empRec),6,data);
    printf("%s\n",buf);
    */
    fclose(data);
    printf("Created database\n");
    exit(0);
}

# 2  
Old 08-20-2008
There are several points about you code I don't agree. Instead of pointing all of them, I just rewrote your code into something that works and fits your need.
Code:
#include <stdio.h>
#include <stdlib.h>

struct date {
    int month;
    int day;
    int year;
    };
struct empRec{
    char name[25];
    char room[10];
    int jobLevel;
    struct date startDate;
    };

int main(){
    FILE *data;
    struct empRec employee= {"Peter North","4B-208",35400,{10,11,1983}};


        struct empRec employee2;

    if((data=fopen("database","w+"))==NULL){
                fprintf(stderr,"Can't Create database\n");
                exit(1);
                }
    if(fwrite(&employee,sizeof(struct empRec),1,data)!=1){
                fprintf(stderr,"WRITE ERROR\n");
                exit(1);
                }

    rewind(data);
    fread(&employee2,sizeof(struct empRec),1,data);
    printf("%s %s %d %d %d %d\n", employee2.name, employee2.room, employee2.jobLevel, employee2.startDate.month, employee2.startDate.day, employee2.startDate.year);
    fclose(data);
    printf("Created database\n");
    exit(0);
}

The database file will always have "weird symbols" because int's are stored as binary data. Not a problem though.
Let me know if I misunderstood something.
# 3  
Old 08-20-2008
thanks redoubtable

Thkx for giving your valuable time.Now it works fine .

Last edited by mlhazan; 08-20-2008 at 07:29 PM..
# 4  
Old 08-20-2008
Do you know why for loop does not work?
Code:
#include <stdio.h>
#include <stdlib.h>

struct date {
    int month;
    int day;
    int year;
    };
struct empRec{
    char name[25];
    char room[10];
    int jobLevel;
    struct date startDate;
    };

int main(){
    FILE *data;
    static struct empRec employee[1000]={
                {"Peter North","4B-208",35400,{10,11,1983}},
                {"John Musa","2B-118",25400,{07,10,1993}},
                {"Paula Jeminova","1A-506",18700,{02,1,1990}},
                {"Patricia Silver","6C-123",52100,{14,21,2000}},
                {"Robert mill","4D-318",42100,{01,19,2008}},
            };

        struct empRec employee2;

    if((data=fopen("database","w+"))==NULL){
                fprintf(stderr,"Can't Create database\n");
                exit(1);
                }
    if(fwrite(&employee,sizeof(struct empRec),1,data)!=1){
                fprintf(stderr,"WRITE ERROR\n");
                exit(1);
                }

    rewind(data);
    fread(&employee,sizeof(struct empRec),1,data);
    int n;
    for (n = 0; n < employee.length; n++) { 
    printf("%s %s %d %d %d %d\n", employee[n].name, employee[n].room, employee[n].jobLevel, employee[n].startDate.month, employee[n].startDate.day, employee[n].startDate.year);
    
    }    
    fclose(data);
    printf("Created database\n");
    exit(0);
}

# 5  
Old 08-20-2008
I'm not sure you understand exactly what's going on there.
Code:
fwrite(&employee,sizeof(struct empRec),1,data)

the 3rd parameter of this function tells you how many sizeof(struct empRec) should be written to data file pointer. So if you had '3' instead of '1' it would write sizeof(struct empRec)*3 bytes of employee to data file pointer (would write 3 entries of employee array struct).

Another thing, employee.length ? There is no member length in struct empRec. If you wanna know the number of entries in that array struct put the number explicitly or add something like
Code:
    static struct empRec employee[1000]={
                {"Peter North","4B-208",35400,{10,11,1983}},
                {"John Musa","2B-118",25400,{07,10,1993}},
                {"Paula Jeminova","1A-506",18700,{02,1,1990}},
                {"Patricia Silver","6C-123",52100,{14,21,2000}},
                {"Robert mill","4D-318",42100,{01,19,2008}},
                {"\0", "\0", 0, {0,0,0}},

and create a function to count the number of elements until the first byte of name is '\0'.
# 6  
Old 08-20-2008
This information is really helpful.thkx
# 7  
Old 08-21-2008
Quote:
Originally Posted by mlhazan
Do you know why for loop does not work?
Don't need a for loop to go through all the record entries...when EOF is reached fread() returns zero for the number of items read and that can be used as a terminal condition.
You don't need to initialize a 1000 element employee[] array when you will be using only a few elements of it. The size of the employee[] array is known completely at compile time using the sizeof operator after the employee[] array has been initialized. See source changes highlighted in red.
Code:
#include <stdio.h>
#include <stdlib.h>

struct date
{
    int month;
    int day;
    int year;
};
struct empRec
{
    char name[25];
    char room[10];
    int jobLevel;
    struct date startDate;
};

int main()
{
    int entries;        /* number of employee records */
    FILE *data;
    static struct empRec employee[] =
    {
        {"Peter North","4B-208",35400,{10,11,1983}},
        {"John Musa","2B-118",25400,{07,10,1993}},
        {"Paula Jeminova","1A-506",18700,{02,1,1990}},
        {"Patricia Silver","6C-123",52100,{14,21,2000}},
        {"Robert mill","4D-318",42100,{01,19,2008}}
    };

    struct empRec employee2;
    entries = (sizeof employee / sizeof employee[0]);

    if ((data = fopen("database","w+")) == NULL) {
        fprintf(stderr,"Can't Create database\n");
        exit(1);
    }
    if (fwrite(&employee,sizeof(struct empRec), entries, data) != entries) {
        fprintf(stderr,"WRITE ERROR\n");
        exit(1);
    }
    rewind(data);

    /* Replace for loop with the while loop below */
    while(fread(&employee2,sizeof(struct empRec), 1, data) == 1)
        printf("%s %s %d %d %d %d\n", employee2.name, employee2.room, employee2.jobLevel,
            employee2.startDate.month, employee2.startDate.day, employee2.startDate.year);

    fclose(data);
    printf("Created database\n");
    exit(0);
}


Last edited by shamrock; 08-21-2008 at 02:23 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

6 More Discussions You Might Find Interesting

1. UNIX Desktop Questions & Answers

please help me to solve it

i thought about to use the commands : wc and sort cut and mybe more .. i need to write a bash script that recive a list of varuables kaka pele ronaldo beckham zidane messi rivaldo gerrard platini i need the program to print the longest word of the list. word in the output appears on a... (0 Replies)
Discussion started by: yairpg
0 Replies

2. Homework & Coursework Questions

help me to solve it thank you

i thought about to use the commands : wc and sort and mybe more .. i need to write a bash script that recive a list of varuables kaka pele ronaldo beckham zidane messi rivaldo gerrard platini i need the program to print the longest word of the list. word in the output appears on a separate... (1 Reply)
Discussion started by: yairpg
1 Replies

3. UNIX for Dummies Questions & Answers

Can somebody solve this

I have to find the files older than 200 days from a path and copy them to some other directory with the current date stamp attached to it. i have written like follows: #!/bin/ksh DSTAMP=$(date +"%y%m%d%H%M") rm $CA_OUT_PATH/ftp_logs/temp touch $CA_OUT_PATH/ftp_logs/temp chmod 777... (13 Replies)
Discussion started by: sreenusola
13 Replies

4. UNIX for Advanced & Expert Users

Can somebody solve this

I have to find the files older than 200 days from a path and copy them to some other directory with the current date stamp attached to it. i have written like follows: #!/bin/ksh DSTAMP=$(date +"%y%m%d%H%M") rm $CA_OUT_PATH/ftp_logs/temp touch $CA_OUT_PATH/ftp_logs/temp chmod 777... (1 Reply)
Discussion started by: sreenusola
1 Replies

5. Shell Programming and Scripting

Can somebody solve this please

I have to find the files older than 200 days from a path and copy them to some other directory with the current date stamp attached to it. i have written like follows: #!/bin/ksh DSTAMP=$(date +"%y%m%d%H%M") rm $CA_OUT_PATH/ftp_logs/temp touch $CA_OUT_PATH/ftp_logs/temp chmod 777... (1 Reply)
Discussion started by: sreenusola
1 Replies

6. Shell Programming and Scripting

How to solve this

I have to write an script for.. CUST: 123 trans: some contents CUST: 1234 trans: some contents Now wat i have to do is this: CUST:123 akash trans: some contents CUST:1234 akash1 trans: I have been able to add... (3 Replies)
Discussion started by: akashag22
3 Replies
Login or Register to Ask a Question