03-03-2012, 14:04
|
|
|
|
חבר מתאריך: 08.02.06
הודעות: 941
|
|
שרשור מחרוזות strcat
נתון הקוד:
קוד:
#include <stdio.h>
#include <conio.h>
#include <string.h>
// here starts the functions
int main()
{
char s1[15];
char s2[15];
char s3[15];
printf ("enter 3 strings: ");
fgets(s1, 15, stdin);
fgets(s2, 15, stdin);
fgets(s3, 15, stdin);
strcat( s1, s2);
strcat( s1, s3);
printf ("%s ", s1);
getch();
return 0;
}
הוא אמור לקבל קלט של 3 מחרוזות מהמשתמש ולהדפיס , לדוגמא:
קלט מהמשתמש:
hello
world
again
פלט:
hello world again
משום מה התוכנית מדפיסה לי
hello
world
again
איפה טעיתי? הקוד הגיוני לא? קודם משרשר את 1 ו2 ואז את התוצר שלהם עם 3?
עכשיו מספר שאלות להבנה יותר מעמיקה:
קוד:
strcat( s1, s2, s3);
1. אני מבין שאת הקוד הזה לא ניתן להכניס כיוון שהמערכת לא מכירה את זה? (המטרה בקוד הזה בעצם לשרשר מחרוזת אחר מחרוזת.
2. קוד אחר:
קוד:
char input[256];
int i;
fgets( input, 256, stdin );
for ( i = 0; i < 256; i++ )
{
if ( input[i] == '\n' )
{
input[i] = '\0';
break;
}
}
אמור לתת שורה חדשה כל פעם שהמשתמש מכניס \n אבל זה לא עובד אלא מדפיס את \n כחלק מהסטרינג, מדוע?
3. בתרגיל אחר שעשיתי, נתבקשתי לכתוב תוכנית שמבקשת את שם המשתמש, ומדפיסה הודעת שלום, אז כתבתי תוכנית שמקבלת דרך fgets אבל לצערי, הפלט יצא רחוק מהרצוי, לדוגמא:
מהלך התוכנית:
פלט: "הכנס שמך: "
קלט: משה.
פלט: "שלום משה
, מה שלומך?"
התוכנית הייתה יורדת שורה לאחר המחרוזת ("משה"), מדוע?
ומה שמצחיק זה, שscanf דווקא פתר את הבעיה, למרות הבעייתיות שלו.
נאלצתי לשים scanf במקום fgets כי כל פעם שהייתי מדפיס
4. בקוד הראשון אני חוזר על הרבה ביטויים, מה הדרך לייעל את הקוד כמובן בהתאם לרמתי ולא מתקדם יותר.
5. כשמבקשים מהמשתמש להקליד 3 מחרוזות, אחת הדרכים היא ליצור 3 מחרוזות נפרדות. האם ניתן ליצור בדרך אחרת מחרוזת אחת דו מימדית 3 על *מס' תווים? האם זה נחשב ל-3 מחרוזות נפרדות?
כל טיפ איך להיזהר לא לעבור את הגבולות של המחרוזות בכל הפונקציות שלהן יתקבל בברכה, עדיין לא סגור על הנושא הזה וההסברים שאני קורא לא מבהירים באופן חד וחלק.
בתודה מראש!
_____________________________________
Bad Spellers Unite!
נערך לאחרונה ע"י SkyRaider בתאריך 03-03-2012 בשעה 14:08.
|