שאלה על STRING ב C

Ziggy Star

New member
שאלה על STRING ב C ../images/Emo122.gif

למה אי אפשר למצוא דרך לקלוט STRING בצורה פשוטה ??? יש תרגיל בשיעורי הבית , אני צריך לקלוט מחרוזת ב STRING ולצמצם רווחים . לדוגמא : א ב ג --> אבג
הבעיה היא , שה STRING לא מוכן לקלוט לי את הסימון רווח . ניסיתי בכל דרך אפשרית שידוע לי ..האם יש ב C אופציה כמו ב BASIC שלאחר כל לחיצה על המקלדת התו שנלחץ יכנס למחרוזת (משהו בסגנון INKEY$ ).
 

ASHY

New member
למה לא לעשות...

שתי מחרוזות, האחת נקלטת ע"י המשתמש, השניה זו המופקת. כל תו שאינו רווח שבמחרוזת הראשונה, יכנס לסוף השניה. הרבה יותר פשוט, לא? אממ וצריכה להיות אפשרות כזו...משהו שילוב של שתי פונקציות סטנדרטיות...למשל:
sprinf(string,"%s%c",string,getchar());​
אני דיי בטוח שאפשר לעשות ככה...הC שלי כבר קצת חלש...
 

Ziggy Star

New member
זה בדיוק מה שאני רציתי לעשות ../images/Emo153.gif

הבעיה היא , שאני לא מצליח לזהות את התו רווח .. אם אני מנסה לקלוט את כל המחרוזת במכה אחת ("א ע י ח א ע כ") . המחרוזת מקבלת רק את התו הראשון . אחרי הרווח היא מפסיקה . וכשאני מנסה לקלוט תו תו ... זה פשוט לא מקבל את הרווח ...
#include <stdio.h> #include <string.h> void main() { char InputString[80]; int i,temp ; printf("Insert a string "); scanf("%s" ,&InputString); }​
זו דרך אחת ... הדרך השניה שניסיתי היא :
#include <stdio.h> #include <string.h> void main() { char InputString[80]; int i,temp ; printf("Insert a string "); for (i=0;i<80;i++) { scanf("%s" ,InputString); } }

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

galh

New member
תשתמש ב- fgets לקרוא מ- stdin.

הפונקציה קוראת את כל השורה (כולל ה- new line).
 

Ziggy Star

New member
לא כל כך הבנתי ../images/Emo151.gif

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

galh

New member
זו פונקציה "פשוטה".

תסתכל בתיעוד כדי להבין איך להשתמש בה. רעיון נוסף, אבל הוא דורש ממך להכיר את הפונקציה scanf, אז אני לא יודע אם מותר לך להשתמש בזה ללימודים.
אם כותבים:
char sz[LINE_LEN]; scanf("%[^\n]", &sz);​
אז sz יכיל שורה שלמה, לא כולל התו new line בסוף. המחרוזת בקריאה ל- scanf אומרת כל תו שהוא לא new line, או במילים אחרות, שורה שלמה.
 
למעלה