שאלה חדשה ב C

blueeye

New member
שאלה חדשה ב C

יש לי תוכנית שמדפיסה למסך ערך של משתנה שבתוכו מחרוזת מסביב לאותו ערך אני רוצה ליצור מסגרת כוכביות אז כתבתי שורה שתדפיס ************ * משתנה * ************ אבל מיקום הכוכבית בסוף השורה של המשתנה ,משתנה בהתאם לאורך החרוזת לדוגמא : *roi לעומת : *liav אני אני שם את המסגרת באופן קבוע (מראש מספיק גדולה) על מנת שלא תזוז לפי אורך המחרוזת שמודפסת באותה שורה ?
 

galh

New member
תבדוק את האורך באמצעות strlen...

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

Marky Mark

New member
הנה פתרון שעשוי לעבוד:

נגיד שאתה מדפיס X כוכביות לגג ולריצפה ואתה יודע שיש לך עוד שתי כוכביות עבור האמצע כל מה שאתה צריך לעשות זה אחרי קליטת המחרוזת, תספור את מספר התווים ואז ככה צייר כוכבית ראשונה בצע את פעולת החישוב של X-2 רווחים פחות מספר התווים כל זה לחלק ל-2 ואז תדפיס את הרווחים כמה שיצא לך, תדפיס את השם, תדפיס שוב את הרווחים, תדפיס כוכבית: תטפל לבד כבר במה קורה אם פעולת החילוק יוצאת שבר או שלם #include <stdio.h> #include <string.h> void main() { char name[11]; int i,length=0,stars=20,space=0; gets(name); length=strlen(name); for (i=0;i<stars;i++) printf("*"); printf("\n*"); space=(stars-2-length)/2; for (i=0;i<space;i++) printf(" "); printf("%s",name); for (i=0;i<space;i++) printf(" "); printf("*"); }
 

ihovav

New member
תעשה כך :

char name[20]; int length,i; gets(name); length = strlen(name); // prints 22 stars puts("**********************/n"); puts("*"); for(i=0;i<((20-length)/2);i++) puts(" "); puts(name); for(i=0;i<((20-length)/2);i++) puts(" "); if((20-length)%2 >0) puts(" "); puts("*/n"); puts("**********************/n");​
 

ke

New member
אפשר גם בעזרת *%

יש ב printf אופציה נחמדה של שימוש במשתנים במקום בקבוע. אפשר לרשום במקום למשל
printf("%10s",a);​
אפשר לרשום
printf("%*s",strlen(a),a);​
כלומר ה * מחליף את המספר. ואז את התוכנית הקודמת אפשר לרשום ככה,
#include <stdio.h> #include <string.h> int main() { char name[10]; printf("Enter name : " ); scanf("%s",&name); int len = strlen(name); printf("**********************\n"); printf("*%*s%*s*\n",10 + len / 2,name,10 - len/2,""); printf("**********************\n"); return 0; }​
 
למעלה