נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: שאלה בC יעול תוכנית עם הקצאה דינמאית למבנ

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
lirany
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 15 March 2005
משתמש: מנותק/ת
הודעות: 49
נשלח בתאריך: 02 July 2005 בשעה 16:47 | IP רשוּם
ציטוט lirany

היי רשמתי תוכנית שהיא אמורה לבצע את הדבר הבא

רצה בלולאה אינסופית, תנאי העצירה הוא קליטת מחרוזת ריקה מהמשתמש, כלומר כזו שאורכה הוא 0. על התוכנית לבקש את המחרוזת מהמהשתמש. המחרוזת יכולה להכיל רווחים. אורך המחרוזת המכסימלי הוא 100 תווים.
כל מחרוזת תישמר בשדה
name בתוך מבנה מסוג Rec

עם קליטת מחרוזת שאינה ריקה - התכנית תבקש הקצאה דינאמית עבור המבנה, תעתיק לתוכו את המחרוזת, ותקצה לו מספר id.  (מספרי id יתחילו מ100 ויתקדמו באחד עבור כל מבנה חדש).

כישלון בפעולת ההקצאה הדינאמית יגרור הודעת טעות וסיום.
לאחר מכן תציב התוכנית את המבנה - בראש שרשרת המבנים.
כלומר... המחרוזת האחרונה שתיקלט - תוצב בראש השרשרת.

בקליטת מחרוזת ריקה... התוכנית "משנה כיוון" ומתחילה "לפרק" את השרשרת.
על התוכנית להדפיס את פרטי המבנה שבראש השרשרת, "לנתק" אותו מהשרשרת, לשחרר את הזיכרון שהוקצה לו ולהעביר את ראש השרשרת - אל המבנה הבא.
כך הלאה... עד לסיום השרשת.

הקוד:

קוד:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define LEN 100 /*defintion for max len of the string*/
#define NULL 0

struct rec {    /*define the struct from the type Rec*/
int id;   /*defintion integer in the struct for the id*/
char name[LEN]; /*defintion array of chars(string) in the struct for name*/
struct rec *next;
};
typedef struct rec Rec;


int main()
{
 int i=LEN;
 char str[LEN];
 Rec *temp;/*temp is pointer for the struct for alloc the struct*/
 Rec *first=NULL;
 clrscr();
 printf("Building the connected structures:\n");
 do
 {
  printf("Please insert a string:");
  gets(str);
   if (*str)
   {
    temp=(Rec*)calloc(1,sizeof(Rec));/*alloc the struct*/
     if(!temp)
  {
      printf("allocation failed!!");
      return 0;
     }
    strcpy(temp->name,str);/*copy the string to the feald in the struct*/
    temp->id=i++;/*to get the values to the struct throw the pointer*/
 temp->next=first;
 first=temp;
   }
 }
while (*str);

printf("Decomposing the connected structures:\n");
while (first)
{

 printf("id:%d, name: %s\n",first->id,first->name);
 temp=first;
 first=first->next;
 free(temp);

}
 getch();
 return 0;

}


 

 

 

חזרה לתחילת העמוד הצג את כרטיס החבר של lirany חפש הודעות אחרות של lirany
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה