hi
Im trying to create a program that would be able to carry out a certain number of tasks any number of times undefined by the user! I was told to use linked list or dynamic arrays but i dont know how to use them propers
any ideas?
help please!
hi
Im trying to create a program that would be able to carry out a certain number of tasks any number of times undefined by the user! I was told to use linked list or dynamic arrays but i dont know how to use them propers
any ideas?
help please!
Can you give us some more information about what you are trying to do?
Code:while(!asleep) { sheep++; }
Its basically a database for a sports day! I start with a menu to either, as mentioned before, input, output, sort and searching. I have just started and i only know the basics! So i tried to put some of my knowledge together.
It's not advanced.Code:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char name[50]; char fname[50]; char lname[70]; int age; char gender[6]; int group; int position; } Individual; int main() { Individual I[1]; void menu(Individual I[]); menu(I); void input(Individual I[]); void output(Individual I[]); void sort(Individual I[]); void s_age(Individual I[]); void search(); } int count =0; int *in void menu(Individual I[]) { int opt; do{ printf("Choose what you want to do\n\n"); printf("1.) Enter information\n2.) View information\n"); printf("3.) Sort information\n4.) Search information\n"); printf("5.) Exit Program\n\n\n"); printf("Enter option: "); scanf("%d", &opt); system("CLS"); switch(opt) { case 1: input(I); break; case 2: output(I); break; case 3: sort(I); break; case 4: search(); break; case 5: exit(0); break; default: printf("INVALID OPTION...PLEASE RE-ENTER..."); printf("\n\n"); printf("Press any key to re-enter..."); getch(); system("CLS"); } }while(opt !=5); } int input(Individual I[]) { int x, i, choice; for(x=0; x<1; x++) { printf("Enter FIRST name: "); scanf("%s", I[x].fname); printf("\nEnter LAST name: "); scanf("%s", I[x].lname); printf("\nEnter age: "); scanf("%d", &I[x].age); printf("\nEnter gender[male/female]: "); scanf("%s", I[x].gender); printf("\nEnter group[1,2,3,4]: "); scanf("%d", &I[x].group); printf("\nEnter position[1,2,3]: "); scanf("%d", &I[x].position); system("PAUSE"); system("CLS"); for (x=0;x<1;x++) { printf("Name: %s %s\n\n",I[x].fname,I[x].lname); printf("Age: %d\n\n", I[x].age); printf("Gender: %s\n\n", I[x].gender); printf("Group: %d\n\n", I[x].group); printf("Position: %d\n\n\n",I[x].position); } printf("\nIs the data correct?\n\n"); printf("1.]Yes\n2.]No\n\nChoice: "); scanf("%d", &choice); system("CLS"); if(choice == 1){ count++; printf("%d", count); in = &count void files(Individual I[]); files(I); } else{ printf("Please re-enter data, correctly...\n\n"); input(I); } } void files(Individual I[]) { int x; FILE*ptr=fopen("Reg.txt", "a"); for(x=0;x<1;x++) { fprintf(ptr, "%s\n", I[x].fname); fprintf(ptr, "%s\n", I[x].lname); fprintf(ptr, "%d\n", I[x].age); fprintf(ptr, "%s\n", I[x].gender); fprintf(ptr, "%d\n", I[x].group); fprintf(ptr, "%d\n\n", I[x].position); } fclose(ptr); } int output(Individual I[]) { FILE*ptr=fopen("Reg.txt", "r"); int a; for(a=0;a<*in; a++) { fscanf(ptr,"%s",I[a].fname); fscanf(ptr,"%s",I[a].lname); fscanf(ptr,"%d",&I[a].age); fscanf(ptr,"%s",I[a].gender); fscanf(ptr,"%d",&I[a].group); fscanf(ptr,"%d",&I[a].position); } for (a=0; a<*in; a++) { printf("%s %s\n\n", I[a].fname, I[a].lname); printf("%d\n\n",I[a].age); printf("%s\n\n", I[a].gender); printf("%d\n\n",I[a].group); printf("%d\n",I[a].position); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); } system("PAUSE"); system("CLS"); }
I want the user to be able to do anything at any time.
Im writing to a file and reading as well. Im not very good in pointers. i tried to use them!
its only allowing me to view 2 sets of entered data, if i add more than 2, the output function crashes.
My friend advised me to use linked lists but im unsure as to how!
any ideas?
i just put the input output and files functions
Your function prototypes should be above main.Code:void menu(Individual I[]); void input(Individual I[]); void output(Individual I[]); void sort(Individual I[]); void s_age(Individual I[]); void search(); int main() { Individual I[1]; menu(I); }
On line 28, you have forgotten a semicolon
Fact - Beethoven wrote his first symphony in C
Firstly, do not use system calls like clr or pause as they can introduce security concerns and make your code not interchangeable between OS's. Why system() is evil - C++ Forum That link is from a C++ website, but the ideas are the same, so don't hold the language against them! (I kid). Secondly, all you need is a while loop inside your main that prompts the user with your menu of options and loops until the user inputs the "exit" option.
Code:#define EXIT '?' while( ( option = getoption() ) != EXIT ) { //do stuff here }
You have written 162 lines but the program doesn't compile because of several errors. That's not a good method to develop a program. You should work step by step and compile/test often to catch errors as soon as possible.
Bye, Andreas
the menu function i am using works fine..ok its like this. When i enter 2 sets of info (input function) the outputs works fine show the 2 sets of info! however if and add another set of info (now 3 sets) the output function crashes! I have no idea why! do i need my struct count to keep incrementing and how?
And I have no idea how you are even able to run the program because your compiler shouldn't accept it:
I think it's time to think about getting better tools.Code:$ make foo cc -ggdb3 -Wall -Wextra -c -o foo.o foo.c foo.c:29:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’ foo.c:73:5: error: conflicting types for ‘input’ foo.c:20:10: note: previous declaration of ‘input’ was here foo.c: In function ‘input’: foo.c:109:18: error: ‘in’ undeclared (first use in this function) foo.c:109:18: note: each undeclared identifier is reported only once for each function it appears in foo.c:110:17: error: expected ‘;’ before ‘void’ foo.c:111:17: warning: implicit declaration of function ‘files’ [-Wimplicit-function-declaration] foo.c: In function ‘output’: foo.c:162:1: warning: no return statement in function returning non-void [-Wreturn-type] foo.c: In function ‘input’: foo.c:162:1: error: expected declaration or statement at end of input foo.c:75:12: warning: unused variable ‘i’ [-Wunused-variable] foo.c:162:1: warning: control reaches end of non-void function [-Wreturn-type] foo.c: In function ‘main’: foo.c:25:1: warning: control reaches end of non-void function [-Wreturn-type] make: *** [foo.o] Error 1
Bye, Andreas
You have your function prototypes inside of your main. Incorrect, just like Click_here stated above. And when they are pulled out and placed in the correct position, you have nothing in your main. Then, according to my previous post, you need a while loop, continually getting options from the user, manipulating the data as needed, until the option accepted is the one that signals a program exit.
Post your revised code for us to help further.
ok i put the function prototypes outside! and it seem to be running properly for 2 sets of data ONLY :/ not more!
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char name[50]; char fname[50]; char lname[70]; int age; char gender[6]; int group; int position; } Individual; void menu(Individual I[]); void input(Individual I[]); void output(Individual I[]); int main() { Individual I[1]; menu(I); } int count =0; void menu(Individual I[]) { int opt; do{ printf("Choose what you want to do\n\n"); printf("1.) Enter information\n2.) View information\n");; printf("3.) Exit Program\n\n\n"); printf("Enter option: "); scanf("%d", &opt); system("CLS"); switch(opt) { case 1: input(I); break; case 2: output(I); break; case 3: exit(0); break; default: printf("INVALID OPTION...PLEASE RE-ENTER..."); printf("\n\n"); printf("Press any key to re-enter..."); getch(); } }while(opt !=3); } void input(Individual I[]) { int x, i, choice; for(x=0; x<1; x++) { printf("Enter FIRST name: "); scanf("%s", I[x].fname); printf("\nEnter LAST name: "); scanf("%s", I[x].lname); printf("\nEnter age: "); scanf("%d", &I[x].age); printf("\nEnter gender[male/female]: "); scanf("%s", I[x].gender); printf("\nEnter group[1,2,3,4]: "); scanf("%d", &I[x].group); printf("\nEnter position[1,2,3]: "); scanf("%d", &I[x].position); printf("DONE Press Enter\n\n"); getch(); } for (x=0;x<1;x++) { printf("Name: %s %s\n\n",I[x].fname,I[x].lname); printf("Age: %d\n\n", I[x].age); printf("Gender: %s\n\n", I[x].gender); printf("Group: %d\n\n", I[x].group); printf("Position: %d\n\n\n",I[x].position); } printf("\nIs the data correct?\n\n"); printf("1.]Yes\n2.]No\n\nChoice: "); scanf("%d", &choice); system("CLS"); if(choice == 1){ count++; printf("%d", count); void files(Individual I[]); files(I); } else{ printf("Please re-enter data, correctly...\n\n"); input(I); } } void files(Individual I[]) { int x; FILE*ptr=fopen("Reg.txt", "a"); for(x=0;x<1;x++) { fprintf(ptr, "%s\n", I[x].fname); fprintf(ptr, "%s\n", I[x].lname); fprintf(ptr, "%d\n", I[x].age); fprintf(ptr, "%s\n", I[x].gender); fprintf(ptr, "%d\n", I[x].group); fprintf(ptr, "%d\n\n", I[x].position); } fclose(ptr); } void output(Individual I[]) { FILE*ptr=fopen("Reg.txt", "r"); int a; for(a=0;a<count; a++) { fscanf(ptr,"%s",I[a].fname); fscanf(ptr,"%s",I[a].lname); fscanf(ptr,"%d",&I[a].age); fscanf(ptr,"%s",I[a].gender); fscanf(ptr,"%d",&I[a].group); fscanf(ptr,"%d",&I[a].position); } for (a=0; a<count; a++) { printf("%s %s\n\n", I[a].fname, I[a].lname); printf("%d\n\n",I[a].age); printf("%s\n\n", I[a].gender); printf("%d\n\n",I[a].group); printf("%d\n",I[a].position); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); } getch(); }
You have a loop inside your menu function that only accepts valid options, which is good. But your menu function should not contain calls to your input or output functions. Your menu function should return the option entered by the user, which is then used inside your main function. It should contain the menu portion, and nothing else. This way will be less misleading as per the names of the functions and what they actually do. On a side note, I am still unable to compile your code. How are you running it?
You also still have system calls inside your code.
What I would do is, (yep!) start over. Like AndiPersti said, focus on individual segments of the program like inputting the data into the data structure and successfully reading it back out to stdout instead of a file. You said you would like to be able to enter an undefined amount of "records", this implies the use of linked lists. This seems a little out of your reach at this time, so focus on using your static sized array. Most importantly, you need to think about code stability. As in, not writing out of bounds in arrays, valid type of data, so on...
Avoid global variables unless absolutely necessary. http://c2.com/cgi/wiki?GlobalVariablesAreBad
Last edited by jwroblewski44; 02-26-2013 at 05:15 PM.
Line 98 is a function prototype, not a function call.
Fact - Beethoven wrote his first symphony in C