פורסם 2006 באפריל 1219 שנים אני כתבתי כךscanf("%d%d%d%d",&num1,&num2,&num3,&num4); okואחרי כל פעם שאני מכניס ערך DOS קופץ שורה איך אני יכול למנוע זאת
פורסם 2006 באפריל 1219 שנים מה בדיוק אתה מצפה שייקרה?שתכניס 4 תוים ואז ייקרה משהו?אם כן - אז נראה לי שעדיף לך להשתמש בפונקציות כמו getch() (או getch או getche, אני אף פעם לא זוכר) שמחכות לתו אחד כל פעם.
פורסם 2006 באפריל 1219 שנים שתי הפונקציות- getch() ו-getche() למעשה קוראות תו אחד בכל פעם רק שאני עדיין לא מבין מה ההבדל...
פורסם 2006 באפריל 1219 שנים E מציג על המסך את התו שנקלט. בלי E לא.(ECHO)מופרה, שים לב שאתה צריך להכניס את התו בלבד ללא ENTER אחריו.
פורסם 2006 באפריל 1219 שנים אל תחליף שום פונקצייה פשוט תכניס תנתונים בשורהכאילו נתון רווח נתון רווח נתון רווח נתוןורק אז אנתר וזהו
פורסם 2006 באפריל 1219 שנים מחבר שתי הפונקציות- getch() ו-getche() למעשה קוראות תו אחד בכל פעם רק שאני עדיין לא מבין מה ההבדל... אסור לי להשתמש בשום פונקציה מתוך <CONIO.H> והנה השאלה שנתנו לנו שאלה 2 כתבו תוכנית שקולטת שני מספרים שלמים חיוביים. המספרים מורכבים מ- 4 ספרות כל אחד. את המספר הראשון התוכנית קוראת על-ידי קריאה אחת לפונקציה scanf. התוכנית תפרק את המספר הראשון לספרות בודדות ותדפיס את ארבע הספרות עם רווח אחד בין כל שתי ספרות. את המספר השני התוכנית קוראת על-ידי ארבע קריאות לפונקציה scanf: כל קריאה קוראת ספרה אחת כערך מטיפוס - char. לאחר שכל ארבע הספרות של המספר השני נקראו, התוכנית תחשב את המספר מארבע הספרות הנ"ל. התוכנית תדפיס את המספר השני לאחר חישובו. לדוגמא: C:\> Hw1_q2 Please enter number: 1234 Please enter another number: 7654 The numbers are: 1 2 3 4 and 7654 - הגישו את תוכניתכם ואת הפלט (בפורמט לעיל) עבור הקלטים הבאים: 1234 ו- 7654 4523 ו- 8502 8750 ו- 7398 הערות: - הניחו (אין צורך לבדוק) שהקלט של התוכנית הוא שני מספרים שלמים חיוביים המורכבים מארבע ספרות כל אחד. רמז: את המספר 1234 ניתן לחשב מספרותיו על-ידי הנוסחה הבאה: 1*1000 + 2*100 + 3*10 + 4
פורסם 2006 באפריל 1219 שנים אסור לי להשתמש השום פונקציה מתוך <CONIO.H> אבל getch() ו-getche() נמצאות בכלל ב-stdio.h...
פורסם 2006 באפריל 1219 שנים אבל getch() ו-getche() נמצאות בכלל ב-stdio.h... לא, הן נמצאות בCONIO. לפותח התראד: את המספר הראשון: תקרא כ- INT, תבדוק את הMOD שלו עם 10, תדפיס, ואז תחלק את המספר ב- 10, ככה 4 פעמים. עבור המספר השני: תקלוט כמחרוזת, ואז תבצע לולאה עם 4 איטרציות. כל איטרציה אתה מכפיל את מה שהיה לך מקודם ב- 10 ומוסיף את האיבר הנוכחי. בקיצור: int n, i;char s[5]; // for '\0'printf("please enter the input bla bla: ");scanf("%d%s", &n, s);for(i=0;i<4 && n!=0;i++, n/=10)printf("%d ", n%10);printf(" was the first numer\n");n=0;for(i=0;s[i];i++)n=n*10+s[i]-'0';printf("%d is the second\n", n);
פורסם 2006 באפריל 1319 שנים אוי, Boomerang הוא הראשון שבלבל אותי. תשתמש ב-getchar() שנמצאת ב-stdio.h והיא קוראת תו אחר תו. getch() ו-getche() בכלל קוראות לחיצה במקלדת ואז יכול להיות מצב שאתה קולט בכלל נגיד את כפתור Tab...
פורסם 2006 באפריל 1319 שנים אני לא חושב שהכוונה בשאלה היא שהמספר יהיה כתוב כרגיל ואתה תקלוט אותו ספרה אחרי ספרה, אלא שתקלוט כל פעם ספרה אחת - בין אם זה נעשה באמצעות רווח או ENTER ביניהם.
פורסם 2006 באפריל 1319 שנים מחבר מה הטעות פה?#include <stdio.h>int main(){int first,x;char sec1,sec2,sec3,sec4;printf("\nplease enter number ");scanf("%d",&first);printf("\nplease enter second number %d",first);scanf("%d ",&sec1);printf("%d old ",first);נגיד אם אני מכניס לFIRST 1234 אני מקבל בקלט בשורה האחרונה 1024 למה? אם אני מוריד את הSCANF בשורה הלפני אחרונה הכל מסתדר אבל אני צריך את השורה הזו
פורסם 2006 באפריל 1419 שנים אתה משחק בחומר נפץ.ל- scanf אתה צריך לתת משתנה מהסוג שאתה אומר לה לצפות לו.אם אתה אומר לה שזה int (ע"י %d) ומעביר מצביע ל- char, אז היא תתייחס אליו כאל מצביע ל- int ותדרוס משתנים באיזור שלו, דבר שיכול לגם להעיף לך את התוכנית.עוד דבר שיכול לקרות, זה המרת פוינטרים לא מיושרת (aligned) שגם מאוד בקלות תעיף לך את התוכנית.בקיצור - אתה רוצה לקרוא int - תעביר int, אתה רוצה לקרוא תו (%c נדמה לי), תעביר char.
פורסם 2006 באפריל 1419 שנים משתנים בזיכרון יושבים בדר"כ בכתובות "עגולות" (כפולות של 4 או 8 בתים).יוצאי הדופן הם בדר"כ מערכים של טיפוסי נתונים יותר "קטנים", כמו char, ואז יכול להיות מצב שכתובת של תא במערך היא לא עגולה.באופן דומה, אם אתה מגדיר 4 משתנים של char ברצף, יכול להיות שהקומפיילר ישים אתם ארבעתם באותו DWORD.כשזה נוגע לטיפוסי נתונים יותר גדולים (int למשל), המעבד לא יהיה מוכן לטפל ב- int שיושב בכתובת לא עגולה (כנראה שזה קשור בקוד שהקומפיילר מייצר לו).מצב כזה בדיוק נוצר כשאתה לוקח כתובת לא עגולה, וממיר אותה למצביע לטיפוס "גדול".(היתה כאן דוגמא, אבל היא פשוט לא היתה נכונה)ניסיתי שוב, ולא הצלחתי לגרום לבעיה כזו לקרות, אני מניח שזה קורה רק במקרים יותר ספציפיים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.