For scanf for a number you need to specify the pointer to the number not the number itself. I.e.
Up vote 2 down vote favorite 1 share g+ share fb share tw.
I'm learning C on my own and as a exercise I have written a program but it does not work. The program is splitted into 3 parts. A header file, a main file for executing the program a file to define the functions.
I'm not using all the functions yet but that shouldn't be the problem. Here is my header file, nothing special in it. #ifndef EMPLOYEE_H #define EMPLOYEE_H struct Employee { char first21; char last21; char title21; int salary; }; struct Employee* createEmployee(char*, char*, char*, int); // Creates a struct Employee object on the heap.
Char* getfirstname (struct Employee*); char* getlastname (struct Employee*); char* gettitle (struct Employee*); int getsalary (struct Employee*); void setfirstname (struct Employee*, char*); void setlastname (struct Employee*, char*); void settitle (struct Employee*, char*); void setsalary (struct Employee*, int); void printEmployee(struct Employee*); #endif In this file I define the functions and how they work: #include "7.1. H" #include #include #include struct Employee* createEmployee(char* first, char* last, char* title, int salary) // Creates a struct Employee object on the heap. { struct Employee* p = (struct Employee*) malloc(sizeof(struct Employee)); if (p! = NULL) { strcpy(p->first, first); strcpy(p->last, last); strcpy(p->title, title); p->salary = salary; } return p; } char* getfirstname (struct Employee* p) { if (p!
= NULL) return p? P->first : ""; } char* getlastname (struct Employee* p) { if (p! = NULL) return p?
P->last : ""; } char* gettitle (struct Employee* p) { if (p! = NULL) return p? P->title : ""; } int getsalary (struct Employee* p) { if (p!
= NULL) return p? P->salary : 0; } void setfirstname (struct Employee* p, char* first) { if (p! = NULL) strcpy(p->first, first); } void setlastname (struct Employee* p, char* last) { if (p!
= NULL) strcpy(p->last, last); } void settitle (struct Employee* p, char* title) { if (p! = NULL) strcpy(p->title, title); } void setsalary (struct Employee* p, char* salary) { if (p! = NULL) p->salary = salary; } void printEmployee(struct Employee* p) { if (p!
= NULL) { printf("%s, %s, %s, %d", p->first, p->last, p->salary, p->salary ); } } And the last file is used to executed the program/functions: #include "7.1. H" #include #include int main () { char decision; struct Employee emp; struct Employee* emps3; for ( int I = 0; I \nFirstname:"); scanf("%s", emp. First); printf("Lastname:"); scanf("%s", emp. Last); printf("Title:"); scanf("%s", emp.
Title); printf("Salary:"); scanf("%d", &emp. Salary); empsi = createEmployee(emp. First, emp.
Last, emp. Title, emp. Salary); } printf("Do you want to print out your information?
(Y/N):"); scanf("%c", &decision); if (decision == 'y' || decision == 'Y') { printEmployee(emps1); } } I don't know what the problem is. I 'm always getting the following error message after typing in first, last, title and salary for the first time. The error is written in german.
It means: Unhandled exception at 0x102de42e (msvcr100d. Dll) in 7.1. Exe: 0xC0000005: Access violation when writing to 0xCCCCCCCC position. I could fix the first problem with the hints given below.
Now when I want to print out the employee data using the function:printEmployee(emps1);, I get the same kind of error with access violation. C link|improve this question edited 7.1. at 20:14 asked 7.1. at 15:25Ordo234111 91% accept rate.
1 You should try stepping through it with a debugger to find out where the problem is. The two answers posted so far point out one possible place. – Noufal Ibrahim Dec 23 '10 at 15:29 Just a general hint: if you build your code with -Wall, usually you can catch lot of simple mistakes regarding scanf(), printf() and struct.
Field instead of struct->field – Francesco Laurita Dec 23 '10 at 16:18 Sorry I don't know what you mean. What is Wall? – Ordo Dec 23 '10 at 16:27 -Wall is a gcc compile option that turns on lots of warnings.
Use it and pay heed. Other compilers probably have a similar option. – Fred Larson Dec 23 '10 at 16:39.
For scanf for a number you need to specify the pointer to the number not the number itself. I.e. Scanf("%d", &emp.
Salary); There may be other problems, but that's the first one I saw.
Thank you. It works now. Only the printEmployee(empsi) doesn't work but I think I can fix that on my own.
– Ordo Dec 23 '10 at 15:32 It should be compulsory to post a comment when down-voting. Why would anyone down-vote this answer? Did I get anything wrong?
– AlastairG Dec 23 '10 at 15:38 @AlastairG I don't see a down-vote for you. (Not sure who else down-voted me though. ) – chrisaycock Dec 23 '10 at 15:41 I did no down vote.
– Ordo Dec 23 '10 at 15:46 Sorry, I must take away the accept answer since I still get an memory error when I want to print out the employee data. – Ordo Dec 23 '10 at 15:49.
Thank you. This is definetly wrong but the error is still the same. – Ordo Dec 23 '10 at 16:04 @Ordo Ok, found another issue involving your createEmployee().
My answer has been updated. – chrisaycock Dec 23 '10 at 16:09.
Don't know, if it's the only issue, but one trouble is : scanf("%d", emp. Salary); Which is wrong (forgot address on salary with &) better try : scanf("%d", &emp. Salary).
This is how you're calling scanf(): scanf("%s", emp. Salary); This is how you're supposed to call scanf(): scanf("%s", &emp. Salary); // note the address to the location you want EDIT: As AlstairG points out, your strings (the char* members) are pointers and thus have the address already.
Emp. First is a string. For strings you pass the buffer pointer itself, not a pointer to that.
In other words he got that right and your answer is wrong. -1 but I'll remove it if you correct your answer (and I see that in time). – AlastairG Dec 23 '10 at 15:30 @AlastairG Ah, right... – chrisaycock Dec 23 '10 at 15:32 no worries, -1 removed.
– AlastairG Dec 23 '10 at 15:39.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.