עבור לתוכן

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

Featured Replies

פורסם

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

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

#include<iostream.h>
#include<string.h>

void enter_words(char *s,char *str[15]);

int main()
{
char ch[100];
char* arr[15];

cout<<"put mila"<<endl;
cin.getline(ch,100,'\n');
enter_words(ch,arr);

for(int i=0;i<15;i++)
{
cout<<arr[i];
}

return 0;
}


void enter_words(char *s,char *str[15])
{
int pos=0,pos_w=0,x=0;
char word[20];

while(s[pos]!='\0')
{
if(s[pos]==' ')
{
word[pos_w]='\0';
str[x]=new char[strlen(word)+1];
strcpy(str[x++],word);
pos++;
pos_w=0;
}
else
{
word[pos_w]=s[pos];
pos_w++;
pos++;
}
}
}



תודה למי שעוזר...

[attachment deleted by admin]

פורסם

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

אין לי כוח ממש להריץ ולראות מה לא בסדר אבל בתור התחלה בלולאה שאתה מדפיס 15 מילים לא בהכרח יש 15 מילים (ורוב הסיכויים שאין 15 מילים) ולכן תנסה להדפיס שם מכתובת שלא שייכת לך ולכן הוינדוס יחסום אותך.

פורסם
  • מחבר

אני יודע שלא תמיד יש 15 מילים

אז מה אפשר לעשות בשביל לפתור את הבעיה??

פורסם

שהפונקציה תחזיר את מספר המילים שהיא קלטה

פורסם
  • מחבר

זאת אומרת לעשות עוד פונקציה שמחזירה לי את מספר המילים שהיא קלטה ולשים את זה במקום ה "15" בקליטה של הפונקציה ..

אבל אני זוכר שהמורה שלי אמר לי שיש כמה אפשרויות לכתיבה הזאת של מערך מחרוזות ואחד מהם זה ע"י "**" ואז נראה לי שלא יהיה את הבעיה כי אני לא מגדיר לו מראש כמה מילים יש..זה יכול לפתור את הבעיה או שלא?

פורסם

מה עשית מזה כזה סיפור

שהפונקציה enter_words תחזיר int של מספר המילים שנקלטו (x)

פורסם

או שתקצה עוד איבר ותשים בו נאל.

אני מציע לך לעשות דיבאג ולראות איפה הבעיה.

פורסם

או שתאתחל את המערך עם nulls, ולפני שאתה מדפיס כל מילה תבדוק אם היא לא null.

פורסם

אתה יכול להשתמש בהקצאה דינאמית ולהקצות עבור כל תו חדש במילה תא נוסף בגודל char..ובסוף לשים לו null.....

זה נקרא dynamic allocation נדמה לי.....

בשפת C יש את פקודת הסיפרייה malloc שבתוך malloc.h, אבל בC++ יש מנגנון יותר טוב, שדומה לג'אווה....

אני ממליץ על חיפוש קצר בגוגל.......

פורסם

HEYDADO - מה?! למה?!

להקצות כל פעם תו זה פשוט ביזבון טיפשי של זמן

אתה יודע כמה זמן לוקח לעשות הגדלה/הקצאה מחדש של זיכרון דינאמי?

פורסם
  • מחבר

מה עשית מזה כזה סיפור

שהפונקציה enter_words תחזיר int של מספר המילים שנקלטו (x)

אבל אני צריך להשתמש במילים האלו אח"כ לבצע עליהם פעולות..

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

פורסם

שוב

מה הקשר?

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

פורסם

אלי:

נכון לעכשיו, הפונ שלך מחזירה VOID. הוצע שתחליף את זה לINT.

ארכיון

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

דיונים חדשים