עבור לתוכן

לולאות לא עובדות בC++

Featured Replies

פורסם

חשבתי תחילה שהבעיה התכנית, אבל אז כדי לבדוק את זה רשמתי סתם איזה משהו

#include <stdio.h>
void main()
{
int i;
for (i=0;i<9 ; i++)
printf(“%d\n”,i);
}

מריץ , וזה מריץ לי בכלל תכנית אחרונה שעשיתי... שיניתי לתכנית בלי FOR, עובד בסדר, אחרי זה שוב ניסיתי עם FOR, שוב מריץ את התכנית האחרונה שעשיתי..

פורסם

אז הבעיה שלך היא עם הקומפיילר, לא קשור ללולאות...

באיזה קומפיילר\סביבת עבודה אתה משתמש?

נ.ב. אל תשתמש ב-void main אלא int main, בסופו שים return 0, ותמיד תמיד תמיד את התוכן של הלולאה (ה-printf) תעטוף בסוגריים מסולסלים.

פורסם

אבל יש לו רק פקודה אחת בתוך הלולאה.. למה לבזבז סתם שורות. במקרים כאלה יש גישות אפילו יותר עצלניות כמו שלי

for (i=0;i<9 ; i++) printf(“%d\n”,i);

פורסם

שורות עולות לך כסף? עדיף קוד קריא ובטוח מתקלות על פני קוד קצר.

בכל מקרה, לא ענית על השאלה שלי.

פורסם
  • מחבר

אני עובד עם VS 2008

רק הורדתי את התוכנה.

לא חושב שהבעיה היא בRETURN ו INT MAIN

א. ניסיתי להוסיף את זה, לא עזר.

ב. במכללה אנחנו עובדים עם אותו VS 2008 ולא זוכר שאי פעם כתבנו ככה..

למה אתה ממליץ לכתוב קודים בתוך פונקציות? במיוחד שהקוד כל כך קטן. העדפה אישית ? או מסיבה אחרת?

פשוט בדר"כ אנחנו גם ככה כותבים קודים עם קריאות לפונקציות בתוכם, זה לא יתחרבש אם כל הקוד יהיה בנוי מפונקציות?

למשל בקוד הזה במקום הVOID לעשות פונקציה ובסוף RETURN 0, הוא יעבוד כמו בהתחלה?

 #include<reg51.h>
sbit C1=P0^6;
sbit C2=P0^5;
sbit C3=P0^4;
unsigned char keyrec();
unsigned char segment(unsigned char i);

void main()
{
unsigned char i,seg;
while(1)
{
i=keyrec();
if(i!=0xff)
{
while(keyrec()!=0xff);
seg=segment(i);
P1=seg;
}
}
}


unsigned char keyrec()
{
unsigned char key=0xff;
while(1)
{
P0=0xf7;
if (C1==0)
key=1;
if (C2==0)
key=2;
if (C3==0)
key=3;

P0=0xfb;
if (C1==0)
key=4;
if (C2==0)
key=5;
if (C3==0)
key=6;

P0=0xfd;
if (C1==0)
key=7;
if (C2==0)
key=8;
if (C3==0)
key=9;

P0=0xfe;
if (C2==0)
key=0;

return(key);
}
}

unsigned char segment(unsigned char i)
{
unsigned char segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
return(segment[i]);
}

[/i]

תודה.

פורסם

איך יצרת את הפרוייקט שלך? איזה סוג של פרוייקט, ואיך אתה מקמפל אותו?

להשתמש ב-void main זה אפשרי בחלק מהקומפיילרים, אבל זה לא אומר שזה נכון. לפי התקנים של C ו-++C זה אסור. אם במכללה אתם עובדים ככה, זה אומר שאתם עובדים לא נכון. בכל מקרה, זה לא מה שהיה אמור לפתור לך את הבעיה.

מה זאת אומרת "לכתוב קודים בתוך פונקציות"? לא ביקשתי ממך לכתוב פונקציה.

הסיבה שלא כותבים את הגוף של לולאת for (וגם של if או while) בלי סוגריים מסולסלים היא כי זה מתכון לטעויות. נניח שמישהו רוצה להוסיף שורה ללולאה - הוא בקלות יכול להוסיף אותה בלי לשים לב שאין סוגריים מסולסלים, מה שיגרום לכך שרק השורה הראשונה תהיה באמת בתוך הלולאה. חוץ מזה, זה בד"כ יותר קריא ככה.

פורסם
  • מחבר

אתה מחדש לי... בחיים לא שמעתי שלפי התקנים אסור להשתמש ב VOID...

אבל אם בVS זה עובד, אז זה כנראה לא כזה קריטי..

בכל אופן, אני אתחיל לרשום כמו שאמרת, אחרי כמה קודים אני כבר אתרגל לזה .

INT MAIN משום מה הזכיר לי פונקציה, כנראה שאין קשר..

פרוייקט יצרתי דרך FILE > NEW PROJECT > WIN32 CONSOLE APPLICATION

אחרי זה בחלון WIZARD בחרתי בEMPTY PROJECT וCONSOLE APPLICATION למעלה בTYPE

לאחר מכן בSOURCE FILES לחצתי על ,NEW ITEM

שם בחרתי בC++ FILE

ובשם שם הפרוייקט כתבתי בסוף" .C "

כשאני בונה תכנית עם קליטה מהמקלדת ואז FOR משום מה זה עובד.. בתכניות אפילו יותר פשוטות זה כבר לא עובד..

הנה למשל ככה זה עובד:

 int a,b,n,i,sum=0;
float avrg;
scanf ("%d%d",&a,&b);
if (a<b)
{
n=b-a;
for (i=(a+1);i<b;i++)
{
sum=sum+i;
printf("%d",i);
}
avrg=sum/(float)(n-1);
printf ("\nSum is:%d\nAverage is:%.2f",sum,avrg);
}

פורסם

ברור ש-int main הזכיר לך פונקציה, כי זו אכן פונקציה. גם void main זה פונקציה, ללא ערך החזרה. ה-main הוא פונקציה כמו כל פונקציה אחרת (כן, אפשר גם לקרוא לה ממקום אחר בתכנית).

בשביל ליצור פרוייקט C רגיל אתה צריך לעשות Empty Project ולא Win32 Console Application.

תוודא שאתה עושה לו build מלא כל פעם שאתה משנה אותו, ותוודא שהקוד מתקמפל כהלכה (יכול להיות שקובץ חלון שאומר שהbuild נכשל, ושואל אם להריץ את הקוד שקומפל לפני כן?)

וכמו שכבר אמרתי, הבעיה היא לא בקוד שלך, אלא בדרך שאתה בונה את הפרוייקט.

פורסם
  • מחבר

אתה מתכוון בחלון שאני מגיע אליו כשאני לוחץ NEW PROJECT, שם ללחוץ על EMPTY PROJECT?

בעיקרון במכללה אני בוחר שם WIN32 CONSOLE APPLICATION וזה עובד אבל ניסיתי עכשיו גם לבחור EMPTY PROJECT

וזה לא עובד ככה.. רק שהבעיה לא ממש ההרצה אלא הודעת שגיאה שאני מקבל כשאני לוחץ על CTRL+F5

Unable to start program

C:\Users......

The system cannot find the path specified

עריכה: זה עובד! ניסתי שוב עם CONSOLE כמו שעשיתי לפני זה וזה עובד עכשיו... מוזר ,מוזר מאוד..

אגב השגיאה ההיא לפי מה שהבנתי נובעת מכך שהוא מנסה למצוא איזה קובץ MANIFEST, אבל לא מצליח למצוא. מה צריך לעשות במקרים כאלה להבא?

בינתיים שיניתי פשוט את הכתובת של הפורייקט לשולחן העבודה ונראה שזה פתר את הבעיה, אבל אולי יש פתרון יותר יעיל?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים