כמה שאלות ב-C:

maromnn

New member
כמה שאלות ב-C:

1) כאשר אני מקליד 4 מספרים לדוגמא: 1234 הם מוצגים במסך דוס כ -1234. אני רוצה שכאשר אני יקליד את ה 4 מספרים האלו הם יוצגו כ - * ככה: ****. (כאילו כמו סיסמא). איך אני עושה זאת? 2)יש לי String שנקרא STR ובתוכו הצבתי P . עכשיו אני רוצה להוסיף לו משתנה מ-INT. לדוגמא: אם יש לי במשתנה ב int אחד (1) אז אני רוצה שהמחרוזת STR תשתנה ל- "P1". 3) מהי הפקודה שסוגרת לבד את חלון התוכנה? ------------------ תודה רבה !! ----------------
 

DarkSwell

New member
לגבי שאלה 1..

כדי לקלוט תו ללא שיוצג תקלוט ע"י שימוש בפונצקיה getch(). פונקציה זו קולטת תו ואינה מציגה אותו. לאחר מכן תציג כוכבית. ch=getch() printf("*"); getch() מחזירה את הקוד אסקי של התו שנקלט(שהוקלד ע"י המשתמש).
 

maromnn

New member
בעיה..

#include <stdio.h> #include <conio.h> void main() { printf("please enter:"); int ch=getch(); printf("*"); }​
הוא קולט רק תו אחד ומסיים את התוכנית..
 

codec

New member
זה מה שאמרת לו לעשות

אם אתה רוצה שהוא יקלוט יותר מתו אחד, תכניס את הפקודות של הקליטה-הדפסת כוכבית ללולאה. אל תשכח לתת לו תנאי יציאה מהלולאה (מספר תוים מקסימלי, תו מיוחד לסיום קלט, ...)
 

maromnn

New member
ואם אני יקליד מספר דו ספרתי

או חד ספרתי ? כאן הלולאה לא תעזור.
 

selalerer

New member
אתה כנראה מתכוון שתו סיום הקלט שלך

יהיה ENTER. במקום להריץ את הלולאה מספר קבוע של פעמים, תבדוק כל פעם מה הוקש ואם זה ENTER אז תצא מהלולאה.
 

maromnn

New member
אתה יכול להדגים?

אני יודע שהאסקי של ENTER הוא 13 אבל איך עושים זאת? תודה.
 

selalerer

New member
כן...

#define ENTER 13 #define MAX_STR_SIZE 256 #include <stdio.h> #include <conio.h> int main() { int ch,numOfChars=0; char str[MAX_STR_SIZE+1]={0}; printf("please enter:"); do { ch=getch(); str[numOfChars]=ch; numOfChars++; printf("*"); } while (ch!=ENTER && numOfChars<MAX_STR_SIZE); if(str[numOfChars]==ENTER) { str[numOfChars]=0; //in case of an ENTER put NULL. } }​
זה נראה לי בסדר (בלי אחריות
)
 

Zack DA

New member
ובונוס - ../images/Emo13.gif

תוסיף את האופציה של cntl+u לחובבי ה- unix מבינינו, כדי למחוק את כל מה שהוקלד עד כה !!!!
 

maromnn

New member
לגבי השאלה השניה:

2)יש לי String שנקרא STR ובתוכו הצבתי P . עכשיו אני רוצה להוסיף לו משתנה מ-INT. לדוגמא: אם יש לי במשתנה ב int אחד (1) אז אני רוצה שהמחרוזת STR תשתנה ל- "P1". מישהו יודע? תודה.
 

זויברג

New member
תשובות ל2 ו3

תשובה ל-2, קיימות שתי דרכים, האחת, מתוסבכת, השניה ממש לא. נתחיל מהמסובכת, אתה יכול לממש בעצמך פונקציה שלוקחת מספר (INT) וממירה אותה אותו למחרוזת, תו אחרי תו, על ידי חילוק שוב שוב ושימוש בMOD (%). זאת האופציה הלא חביבה. האופציה השניה היא, להשתמש בפונקציה sprintf, שמחזירה מחרוזת מפורמטת לתוך מחרוזת מוקצת מראש. הפוקציה sprintf פעולת בדיוק כמו הפונקציה printf המוכרת, אך במקום לשלוח את הפלט לstdout (המסך), הפלט נכתב למחרוזת. ובחזרה לשאלתך, הנה המימוש:
char buff[MAX_LEN]; //מגדירים מחרוזת, חייב להיות מוקצה!! אחרת תהיה שגיאה sprintf(buff,"%s%d",myStr,myInt);​
הפונקציה תציב את המחרוזת המפורמטרת לתוך הבאפר buff, במקרה שלך, הערך של myStr יהיה "P" (אם הערך הוא תמיד "P", אתה יכול להציב "P" ישירות במקום %s כך:
sprintf(buff,"P%s",myInt);​
עוד הערה קטנה, אסור לתת לפונקציה כאחד הפרמטרים את הבאפר של הפלט, אחר תהיה לולאה אינסופית בתוך הפונקציה, ואחריה, הודעת שגיאה לא נעימה.
אם אתה רוצה מימוש יותר פרטני, כך הייתי ממש את שאלה 2:
char buff[MAX_LEN]; //מקצה באפר sprintf(buff,"%s%d",STR,INT); //מכניס אליו פלט של מחרוזת מפורמטת strcpy(STR,buff); //מעתיק מבאפר לתוך מחרוזת מקור​
תשובה לשאלה 3, זה קצת תלוי בפלטפורמה שעליה התוכנית שלך רצה. למשל, בתוכנית DOS, המשתמש שמריץ את התוכנית יכול לקבוע מראש שהחלון ישאר פתוח בסוף התוכנית. אם יש אפשרות לסגור את החלון בסוף התוכנית, החלון יסגר, כאשר התוכנית תגמר. קיימות כל מיני דרכים לסיים תוכנית. היפה מכולם לפי דעתי היא לעשות return בפונקציה הראשית main. דרך שניה שאני מכיר היא הפוקציה exit שיוצאת מהתוכנית ומחזירה ערך למערכת.
 
למעלה