עבור לתוכן

עזרה בשפת C

Featured Replies

פורסם

התחלתי ללמוד היום שפת C כי בבית הספר הדפוק שלי מלמדים רק פסקל שהבנתי שזה לא שימושי בכלל...

אני לומד מכל מיני מדריכים באינטרנט.

כתבתי איזו תוכנית שלא עובדת לי.

מטרת התוכנית היא לכתוב לתוך קובץ טקסט ואחר כך לקרוא ממנו.

למדתי שצריך לכתוב fflash(stdin) לפני כתיבה בקובץ טקסט.

מה זה עושה?

ומישהו יכול להגיד לי מה לא בסדר בקוד הבא?

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

      FILE *ptr;

  char shalom[25];

  char aot;

  void write_to_file (char shalom[])

  {

         ptr = fopen("shalom.txt", "wt");

         if (ptr == NULL)

            exit(1);

         else

{

        printf ("writing to the file %s :\n",shalom);

fflush (stdin);

for (fscanf (stdin,"%aot",&aot);!feof(stdin);fscanf (stdin,"%aot",&aot))

fprintf (ptr,"%aot",&aot);   

     if (fclose(ptr))

               exit (1);

            else

               printf ("\n\rThe file %s has been closed\n\r", shalom);

}

  }

  void read_from_file (char shalom[])

  {

  FILE *ptr;

  printf("Reading from the file %s",shalom);

  ptr = fopen("shalom.txt", "rt");

          if (ptr == NULL)

  {

  printf("Cannot write to the file.\n");

  exit (1);

  }

  else

  {

  printf("Reading from the file %s :\n",shalom);

  for (fscanf(ptr,"%aot",&aot);!feof(ptr);fscanf(ptr,"%aot",&aot))

  fprintf(stdout,"%aot",aot);

  fclose(ptr);

  printf("end of file");

  }

  }

  void main ()

  {

  printf ("enter file name to create");

      scanf ("%s",shalom);

  write_to_file (shalom);

  read_from_file (shalom);

  }

פורסם

תערוך את ההודעה שלך ותכניס את הקוד לתוך זה [code*][*/code] (בלי הכוכביות)

פורסם
  • מחבר

ערכתי

פורסם


FILE *ptr;
char shalom[25];
char aot;

תעביר לתוך הMAIN שלך.


ptr = fopen("shalom.txt", "wt");

צריך להיות


ptr = fopen(shalom, "wt");[/code

for (fscanf (stdin,"%aot",&aot);!feof(stdin);fscanf (stdin,"%aot",&aot))

fprintf (ptr,"%aot",&aot);



תחליף את "%aot" ב- "%s" [b]משהו רשום בעברית כדי שלא תהייה בעיה בפורום[/b].

ותגדיר את aot בתוך הפונ שאתה משתמש בהם(זוכר שהורדת את זה מתחילת הקובץ?(
איפה שרשמת מקודם, ציין שאילו יהיו משתנים גלובלים, ובתכנות מנסים להמנע כמה שיותר ממשתנים גלובאלים.
מחרוזות מקיפים ב- "", אך מכיוון שרצית שהוא יגש לקובץ ששמו נמצא במשתנה SHALOM אז אתה צריך לרשום רק את שם המשתנה, בלי "".
ובקשר לשלישי, אחרי האחוז אתה צריך לרשום לו למה אתה מצפה, לאיזה סוג קלט אתה מצפה, אם זה מספר אז %D, אם מחרוזת %S, ואם מספר עם נק אז %F וכו', ולא את שם המשתנה. וכדי שלא תתבלבל- שמות משתנים לא רושמים בין "".

פורסם
  • מחבר

כן איזה טמבל אני.

את ה- txt והקליטה כבר ראיתי.

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

אז מישהו מכיר אתר חינמי ללימוד C? עדיפות לעברית מנוחיות, אבל אם אין אז באנגלית.

כרגע אני אלמד מספר שמצאתי באינטרנט באנגלית שקוראים לו Teach Yourself C in 21 days אבל אם למישהו יש המלצה לדרך לימוד חינמית מהאינטרנט שיגיד לי בבקשה.

תודה על העזרה.

פורסם

זה ספר לא רע, אבל לפחות הגרסא המודפסת שיש לי (מלפני 8 שנים בערך) מלאה שגיאות קטנות ומעצבנות.

פורסם
  • מחבר

סבבה תודה.

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

בתור בסיס, הספר הזה נראה לך בסדר בעיקרון?

אם אני אלמד אותו טוב ואדע הכל שם אחרי שפתרתי את כל התרגילים שם והכל.. אני אוכל לעבור נגיד ל- C++ נכון?

פורסם

אופס, חשבתי שדיברת על teach yourself c++ in 21 days...

למה צריך 21 יום כדי ללמוד C?

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

אגב, אין שום דבר רע בפסקל, גם בשביל שפת לימוד וגם בתור שפה שימושית (סביב פסקל בורלנד בנתה את Delphi)

פורסם
  • מחבר

לא יודע...

אח שלי אומר לי שצריך בסיס טוב ו-c זה בסיס טוב.

אני במילא התחלתי מפרק 9 שזה פוינטרים כי את כל ה- while , for והשטויות אני יודע...

פורסם
  • מחבר

מישהו יודע מה לא בסדר בתוכנית הזו?

#include <stdio.h>

#include <stdlib.h>

main()

{

char *p_chr;

p_chr = malloc(80 * sizeof(char));

if (p_chr== NULL)

{

printf("Insufficient Memmory Space");

exit(1);

}

gets(p_chr);

puts(p_chr);

return 0;

}

פורסם

p_chr = malloc(80 * sizeof(char));

אתה צריך להוסיף CASTING לפני הMALLOC ל- CHAR *.(MALLOC זו פונ משונה שכזו)


p_chr = (char *)malloc(80 * sizeof(char));

ד.א. מומלץ בדרך כלל להקצות מערך בגודל שלא ידוע, למשל, עכשיו ידעת שאורך המחרוזת יהייה מקסימום 79, ולכן הקצאת בגודל 80(ל- \0), היית יכול להשתמש במערך סטטי במקום זה.

פורסם
  • מחבר

תודה רבה.

ממש עזרת.

אתה יכול רק להסביר לי מה זה עושה?

פורסם

זה מציין שההקצאה היא מסוג CHAR.

פורסם

דרך אגב, נראה לי שבקומפיילרים ישנים malloc דווקא היה מחזיר char* ולא void*.

פורסם
  • מחבר

אז יכול להיות שבגלל זה בספר שאני לומד ממנו c (שהוא יכול להיות ישן מאוד) כתבו גם איך שגוסט דוג וגם איך שאני כתבתי...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים