ABA


"בניתי תוכנית מאוד פשוטה בC ורציתי לשאול שאלה"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15836 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15836
liran  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 27.5.08
9239 הודעות, 2 פידבק
   02:02   23.04.10   
אל הפורום  
  בניתי תוכנית מאוד פשוטה בC ורציתי לשאול שאלה  
 
   ערכתי לאחרונה בתאריך 23.04.10 בשעה 02:12 בברכה, liran
 
זאת התוכנית:


#include <stdio.h>

main()
{
char name1;
char lastname1;
int age;

printf("First tell me your name:");
scanf("%s", &name1);
printf("Thanks, your name is %s\n", name1);

printf("Please tell me your last name:");
scanf("%s", &lastname1);
printf("Thanks, your last name is %s\n", lastname1);

printf("Please tell me your age:");
scanf("%d", &age);
printf("Thanks, your age is %d\n", age);

printf("Thanks for the info, so your full name is %s %s and your age is %d", name1, lastname1, age);

getch();
}



אני כרגע בלמידה אז התוכנית הזאת היא בשביל למידה בלבד.

מצטער שזה לא מדביק את זה כמו שצריך פה יש משהו יותר נורמלי:
http://paste.org/pastebin/view/17673


רציתי לדעת לגבי המשתנים של הchar שרשמתי, הגבלתי כל משתנה ל100 תוים, יש אפשרות לעשות את זה בצורה יותר נורמלית? ללא הגבלה?

פשוט לקבל את הקלט של המשתמש מבלי לקבוע גבול מסויים?

תודה רבה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אפשר D-KinG 23.04.10 02:27 1
  אני מניח שכתבת בסוף getch כדי שהתוכנית לא תיסגר מיידית Zippo  23.04.10 10:50 2
  read מה-stdin או fgetc מה-stdin (אבל אז זה יותר נוח ldan192  23.04.10 10:58 3
     לא ידעתי שזה אפשרי... Zippo  23.04.10 13:34 4
         או מדמה REALLOC ע''י ronen333  23.04.10 13:40 5
             האם יש אפשרות לדעת מה אורך המחרוזת בבאפר ללא קליטה? Zippo  23.04.10 13:52 6
                 הרבה פונקציות מקבלות מה שנקרא NULL TERMINATED Net_Boy  23.04.10 13:56 7
                     string הוא כמובן משתנה שכבר נקלט. אבל: Zippo  23.04.10 14:03 8
         לך תדע איך זה ממומש מאחורי הקלעים. יש מצב שבתור ldan192  23.04.10 14:17 9

       
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   02:27   23.04.10   
אל הפורום  
  1. אפשר  
בתגובה להודעה מספר 0
 
   בהנחה שבאמת הכתובת שהבאת זה העתקת נכונה של הקוד שלך
אתה לא יכול לכתוב, scanf("%s", &name1);
אתה צריך להעביר ל-scanf כתובת של משתנה, name1 הוא בעצמו כתובת לכן צריך לכתוב בלי &
לא ברור מה זה ה-getch(); בסוף
ולגבי השאלה שלך, זה אפשרי
חפש על malloc בגוגל
כתוב קצת גם פה
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
נ.ב
ממליץ על הספר The C Programming Language SecondEdition


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   10:50   23.04.10   
אל הפורום  
  2. אני מניח שכתבת בסוף getch כדי שהתוכנית לא תיסגר מיידית  
בתגובה להודעה מספר 0
 
יש פקודה בשביל זה:
system("PAUSE");

לגבי הקצאה דינמית:

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

fgets(str,100,stdin)

str - מחרוזת לקלוט לתוכה
100 - מספר מקסימלי של תווים לקלוט
stdin - לקלוט מתוך הסטנדרט אינפוט (מקלדת)

אז איך בכל זאת אפשר לקלוט באופן מדוייק את כל האינפוט:

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

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

כמו שאמרתי למעלה, לא יעיל בעליל, ועדיף "לספוג" את אי היעילות שבהגדרת מערך גדול מדי...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   10:58   23.04.10   
אל הפורום  
  3. read מה-stdin או fgetc מה-stdin (אבל אז זה יותר נוח  
בתגובה להודעה מספר 0
 
יותר ב-++C כי אתה יכול לקרוא כל הזמן לאופרטור += של string).


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   13:34   23.04.10   
אל הפורום  
  4. לא ידעתי שזה אפשרי...  
בתגובה להודעה מספר 3
 
בעצם מתבצע מן realloc על כל תו?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:40   23.04.10   
אל הפורום  
  5. או מדמה REALLOC ע''י  
בתגובה להודעה מספר 4
 
   העתקת כל התווים למערך חדש ושחרור הזכרון מהישן...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   13:52   23.04.10   
אל הפורום  
  6. האם יש אפשרות לדעת מה אורך המחרוזת בבאפר ללא קליטה?  
בתגובה להודעה מספר 5
 
אפשרי לספור את התווים עד לסוף שורה, או EOF, ללא קליטה ממש של התווים?
אם כן, אז אפשר פשוט להגדיר מערך בדיוק בגודל הנ"ל, ולקלוט מיידית לתוכו.
אם לא, אז גם המערך ה"ישן" שהזכרת, איך מוודאים שהוא מספיק גדול?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   13:56   23.04.10   
אל הפורום  
  7. הרבה פונקציות מקבלות מה שנקרא NULL TERMINATED  
בתגובה להודעה מספר 6
 
   STRING
הן סומכות על המתכנת שיתן פוינטר למחרוזת שמסתיימת ב-0.
במקרה של std::string ב ב-C++ הוא מנהל לעצמו משתנה עם הגודל של המחרוזת.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   14:03   23.04.10   
אל הפורום  
  8. string הוא כמובן משתנה שכבר נקלט. אבל:  
בתגובה להודעה מספר 7
 
הייתי רוצה שתהיה את האפשרות (או אשמח לגלות אם היא קיימת) לעשות משהו כזה:

str string << STDIN;

כאשר string הוא אובייקט מסוג str,
האופרטור >> פועל בצורה דומה לcout (איזשהיא העמסת אופרטורים)
ו-STDIN כמובן הקלט.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:17   23.04.10   
אל הפורום  
  9. לך תדע איך זה ממומש מאחורי הקלעים. יש מצב שבתור  
בתגובה להודעה מספר 4
 
רשימה מקושרת של Char-ים אפילו


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net