עזרה ב-C

maromnn

New member
עזרה ב-C

מישהו יכול להראות לי תוכנית שהיא תקלוט מספר בעל 1 עד 3 ספרות (1-100) שתשים אותו במשתנה X אבל לא תציג אותו על המסך? תודה רבה!
 

maromnn

New member
נראה לי שאתה מתבלבל

מה שכתבת זה ב-C? כי הוא מריץ לי 5 שגיאות..
 

vinney

Well-known member
המם....

אתה יודע איך C נראית? כי נראה שאתה מבקש מאיתנו לעשות לך ש"ב בלי שתדע בכלל מה זה C...
 

annefan

New member
צודק

הנה הפתרון:
#!/bin/bash read a if (( "$a" > "0" && "$a" < "100" )); then echo $a fi​
 
הבנתי שאתה משתף איתו פעולה.

שגם אתה אומר שמה שהוא כתב זה ב C. אתה רוצה מכתב התנצלות בשלושה העתקים?
 

maromnn

New member
מה שאני עשיתי זה דבר כזה:

#include <stdio.h> #include <conio.h> void main() { int l; for (l=1;l<=20;l++){ int i=0,sum=0,ch; do { i++; ch=getch(); ch=(ch-48); if(i==1) { printf("\n*"); sum=sum+(ch*100); } if(i==2) { printf("*"); ; sum=sum+(ch*10); } if(i==3) { printf("*"); ; sum=sum+ch; } if(i>4) { printf("no"); } } while (ch != -35); printf("\n%d",sum); } }​
שכאשר אני מקליד מספר תלת ספרתי הוא נותן אותו למשתנה אחד. עכשיו אם אני מקליד מספר דו ספרתי או חד ספרתי הוא לא נותן לי את המספר שהקלדתי. מישהו יכול לעזור לשפר? תודה.
 
אני לא חושב שיכולת לסבך את זה יותר.

לא יותר פשוט לבדוק אם המספר הוא בין 1 ל 100 ואם כן - להכניס אותו למשתנה?
 

vinney

Well-known member
שמעת על switch?

מבנה בקרה מאוד מועיל, תעבור עליו. מעבר לזה לא ברור לי מה ניסית לעשות. מה זה -35? מה זה 48?
 

maromnn

New member
ועוד אתה שואל אותי איך C ניראת?

-35 אחרי המרה מקוד ASCCI היא 13 = מקש ENTER .. וכבר פתרתי את זה בדרך הזאת:
#include <stdio.h> #include <conio.h> void main() { int l; for (l=1;l<=20;l++){ int ch,ch1,ch2,ch3,code; while ((ch != -35) || (ch2 != -35)||(ch1 != -35)||(ch3 != -35)) { ch=getch(); while (ch==13) { printf("\nyou must enter a number.\n"); ch=getch(); } printf("*"); ch=(ch-48); ch1=getch(); if (ch1==13) { code=1; break; } else { printf("*"); ch1=(ch1-48); } ch2=getch(); if (ch2==13) { code=2; break; } else { printf("*"); ch2=(ch2-48); } ch3=getch(); if (ch3==13) { code=3; break; } else { printf("\nyou cant enter more then 3 digits, please enter again:\n"); } }//end main while if (code==1) code=ch; if (code==2) code=(ch*10)+ch1; if (code==3) code=(ch*100)+(ch1*10)+ch2; printf("\n%d\n",code); } }​
עכשיו אני ישתמש ב switch אולי יהיה קצר יותר.. תודה בכל מקרה.
 

vinney

Well-known member
אתה עדיין לא הבנת את הציניות ../images/Emo13.gif

אני יודע את קוד ASCII בעל פה, הרעיון הוא שלא משתמשים במספרים סתם ככה (מה שנקרא "מספרי קסם"). אם יש לך קבועים בתוכנית - שים אותם ב define#, אל תפזר מספרים בקוד. במקרה הזה עדיף היה לכתוב:
ch-='0'; במקום ch=(ch-48);​
הפעולה היא אותה פעולה, אבל הרבה יותר ברור מה אתה מנסה לעשות.
 

maromnn

New member
OK.. תודה.

אני רק מתחיל ללמוד C השנה, ועדיין לא הגעתי למוגדרים. אבל מה זה -ch ? דומה ל: --ch? תודה.
 

vinney

Well-known member
לא

אופרטור =- מחסיר ממה שיש בצד שמאל שלו את מה שיש בצד ימין שלו. לכן
ch = ch - x; שקול ל ch -= x;​
בדומה, יש גם אופרטור =+. אם לא למדתם הגדרות DEFINEים, אז תשתמש ב '0' ולא ב48 (שתי דרכים לכתוב אותו דבר ב C, רק ש'0' מבהיר הרבה יותר טוב את מה שאתה עושה).
 

vinney

Well-known member
יש גם =/, =*, =!, =| , =<<, =>>

ועוד הרבה אופרטורים מקצרים, שתלמד עם הזמן.
 
למעלה