עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

מערכים ופונקציות בc

Featured Replies

פורסם

שוב שלום לכולם,

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

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

המטרה היא לכתוב לכל אחת מהאופציות פונקציה משלה ובתכנית הראשית לקרוא להן לפי הצורך.

הבעיה: אני לא מצליח לאתחל את המערך. כתבתי פונקציה אשר מזינה ערכים (scanf) לכל אחד מערכי המערך אבל בפונקציה הראשית אני לא מקבל את הערכים האלו ובמקומם מקבל זבל. יש דרך שפונקציה תחזיר מערך? או דרך אחרת לגרום לזה לקרות?

הקוד:


#include <stdio.h>
#define num1 10


int arr[num1]= {};


int choice, i;




void one(int arr[])
{
for (i=0; i<10; i++)
{
scanf("%d", &arr[i]);


}






}








int main()
{


printf("choose from the list:\n");
printf("1-initialize the array\n");
printf("2-find the smallest and biggest number in the array\n");
printf("3-find a number and the location\n");
printf("4-delete even numbers from the array\n");
printf("0-exit the program\n");


scanf("%d", &choice);




if(choice>=0 && choice<=4)
{
switch(choice)
{

case 1:
one(arr);
main();
break;


case 2:
for (i=0; i<10; i++)
{
printf("%d ", &arr[i]);
}
main();

break;


}






}


else
{
printf("--------------------------\n");
printf("wrong choice, try again...\n");
printf("--------------------------\n");
main();
}








printf("\n");


return 0;
}



פורסם

קודם כל, שימוש במשתנים גלובליים (מחוץ ל-main) הוא לא נכון פרט למקרים מאוד מסויימים. הפונקציה שכתבת באמת קולטת ערכים למערך שלך, רק שאתה לא מדפיס אותו נכון. במקום להדפיס אתה משום מה קורא שוב ל-main. תכתוב פונקציה נוספת שמדפיסה את המערך ותקרא לה כל פעם שאתה רוצה להדפיס. ב-case 2 אתה משתמש ב-& בתוך ה-printf למרות שהוא לא מקבל כתובת כמו ה-scanf.

פורסם
  • מחבר

יצאתי חציל :s0403:. עשיתי העתק-הדבק מהscan לprint ושכחתי להוריד את ה&. הפונקציה שמדפיסה היית סתם כדי לבדוק שהערכים באמת נכנסים. תודה רבה!

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

פורסם

זה לא נכון לכתוב ככה קוד. למעשה לקרוא שוב לmain זה אחד הדברים היחידים שכנראה לא נכון לעשות אף פעם :)

מה שנכון לעשות הוא לולאה שממשיכה עד שמתקיים תנאי עצירה מסוים. למשל: 1-4 זה הפונקציות שברצונך לבצע, וכל קלט אחר - סיום התוכנית.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.