עזרה בתרגיל

hottnr

New member
עזרה בתרגיל

היי אני מנסה לפתור איזה תרגיל כמו :
כתבו פונקציה ReadPerson הקולטת מהמשתמש שם פרטי (מילה אחת עד 20 אותיות), שם משפחה (מילה אחת עד 30 אותיות) ושנת לידה (4 ספרות) ויוצרת מחרוזת אחת המכילה את כל המידע הזה בפורמט הבא: שם משפחה, רווח אחד אחריו, שם פרטי, רווח אחד אחריו, שנת לידה. הפונקציה רושמת את המחרוזת לתוך מערך מטיפוס char, שאותו היא מקבלת כפרמטר, ומחזירה 1. אם המשתמש מכניס במקום אחד השמות 0 (ספרה אפס), אז הפונקציה לא יוצרת את המחרוזת ומחזירה 0. בתוך הפונקציה מותר להניח כי המערך מספיק גדול למחרוזת הנוצרת וכי הקלט מהמשתמש תקין וכל השמות מופיעים עם אות ראשונה גדולה ושאר האותיות קטנות.
לדוגמא, דו-שיח עם המשתמש יכול להיראות כך:
Enter the first name:
Dan
Enter the last name:
Adler
Enter the year of birth:
1980
וכך ייראה המערך כתוצאה:
‘\0’ ‘0’ ‘8’ ‘9’ ‘1’ ‘ ‘ ‘n’ ‘a’ ‘D’ ‘ ‘ ‘r’ ‘e’ ‘l’ ‘d’ ‘A’
הצלחתי לבנות את המערכים אבל לא הצלחתי לעשות שברגע שבמקום השם או השם משפחה יוקש 0 התוכנית תרשום 0 ולא תריץ את המערך ואם השמות תקינים ואין בהם 0 אז יודפס המערך המלא עם ירידת שורה ואז 1 .


זה מה שבניתי עד עד כה

:#pragma warning(disable : 4996)
#include
#include
#include
#include

void main()
{
char fname[20], lname[10], year[4];

printf("Please enter first name: ");
scanf("%s", fname);
printf("Please enter last name: ");
scanf("%s", lname);
printf("Please enter year of birth: ");
scanf("%s", year);
printf("\n");
printf("\n");
while (fname == 0)
printf("0");
strcat(lname, " ");
strcat(lname, fname);
strcat(lname, " ");
strcat(lname, year);
printf("details:%s\n\n", lname);
system("pause");
}


אשמח לעזרה מכל אחד שיודע
 

hottnr

New member
המשך הבקשה

התוכנית שאני עובד איתה היא בשפת c
 
תתחיל בכך שבכלל תכתוב פונצקיה ...

קוד:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//First lets declare the function
int ReadPerson (char * answer); 

//now create main.
int main (void) {
    char * strAns;
    int ans = ReadPerson(strAns);
    
    if (0 == ans) {
        printf ("\r\nsome answers were empty\r\n");
    } else {
        printf ("\r\nnow we may go on\r\n");
    }
    
    return 0;
}

//the requested function.  to the lecterrer send this section only.

int ReadPerson (char * answer) {
    char fName[21];
    char lName[21];
    char year[5];
    
    answer = (char*) malloc(47*sizeof(char));

    printf ("\r\nfName:"); 
    scanf ("%s", fName);
    if (strcmp("0", fName) == 0) {
        return 0;
    }

    printf ("\r\nlName:"); 
    scanf ("%s", lName);
    if (strcmp("0", lName) == 0) {
        return 0;
    }
    
    printf ("\r\nYear:"); 
    scanf ("%s", year);
    
    sprintf ( answer, "%s %s %s", fName, lName, year);
    return 1;
}
אל תעשה "העתק הדבק" מהתשובה שלי למרצה שלך. כי:
א. יש פה באג מכוון.
ב. סביר שגם הוא או מישהו מהמתרגלים קורא פה, ואם הוא יקבל עבודה עם הבאג המכוון שלי, הוא יזהה אותו.
 
למעלה