איך לקלוט למערך מספרים חיוביים בלבד בשפת C?

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

אם יש לך חסם לכמות המספרים שהולכת להיכנס למערך אז אתה יכול להשתמש במערך סטטי. אחרת, תצטרך להשתמש במערך דינמי (באמצעות למשל malloc) או כל פעם להגדיל מערך סטטי ידנית.
אני מניח שאתה מקבל את החסם מהמשתמש ולכן נשתמש במערך סטטי.
קודם נציג את התוכנית ולאחר מכאן נסביר אותה:

#include <stdio.h>

int main() {
    int n;
    printf("Please enter the size of your array\n");
    scanf("%d",&n);
    if (n < 1) {
        printf("Invalid size\n");
        return 0;
    }
    int arr[n];
    printf("Enter %d elements in the array\n",n);
    for(int index = 0; index < n ;index++) {
        int element;
        scanf("%d",&element);
        if (element < 0) {
            printf("Invalid element: %d",element);
            return 0;
        }
        arr[index] = element;
    }

    // Print the elements of array
    printf("Printing user's numbers\n");
    for(int index = 0; index < n ;index++) {
        printf("%d",arr[index]);
        if (index != n-1) {
            printf(" ");
        }
    }
    
    return 0;
}

ריצה ראשונה של התוכנית ללא מספרים שליליים:

Please enter the size of your array
5
Enter 5 elements in the array
3
2
5
8
1
Printing user’s numbers
3 2 5 8 1

כל המספרים חיוביים ולכן נכניס אותם למערך בגודל 5 ולאחר מכאן נדפיס אותם.

ריצה שנייה של התוכנית עם מספרים שליליים:

Please enter the size of your array
5
Enter 5 elements in the array
3
2
-1
Invalid element: -1.

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

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

הסבר מפורט ומובן תודה !
במיקרה וגודל המערך לא מוגדר ורוצים שהמשתמש יוכל להכניס מספרים בלי סוף עד שהוא מכניס מספר שלילי את זה איך אני עושה?

ובלי קשר יש לך pdf שימושיים לחזקה לפני מבחן בC ? כמו טעויות נפוצות טיפים ,מערכים מחסנית וכו׳?

היי @Saareli, במקרה וגודל המערך לא מוגדר, תצטרך להשתמש במערך דינמי בעזרת malloc או calloc או כל פונקציה אחרת שלמדת. זה לא המקום לבקש חומרי עזר לקורסים אבל אני יודע שרבים ממליצים על הספר The C Programming Language של Brian W. Kernighan, Dennis M. Ritchie. די בטוח שניתן למצוא גרסה זמינה של הספר באינטרנט.