ج - استدعاء وظيفة وإعطاء 2D صفيف

أعطانا أستاذنا في المدرسة مهمة برنامج "بسيط" في C.

يجب أن ننشئ مصفوفة ثنائية الأبعاد ، واملأها بأرقام عشوائية وأرسلها إلى وظيفة أخرى. هذه الوظيفة يجب أن تعطي 2D-Array.

المشكلة هي: كيف يمكنني تسليم 2D Array؟

أيضا لدي مشكلة عن طريق استدعاء الوظيفة. لقد قمت بتضمين الملف .h ، ولكنه دائمًا ما يعطيك أخطاء.

#include 
#include 
#include "ShowMatrix.h"

#define W1 10
#define W2 10
int main(void) {
    int a,b;
    int array[W1][W2];
    for(a = 0; a < W1; ++a)
    {
        for(b=0; b

الوظيفة التي أريد الاتصال بها:

void ShowMatrix(int array[][10], int W1, int W2)
{
    int a,b;
    for(a = 0; a < W1; ++a)
    {
        for(b=0; b

رأس جزء من func:

#ifndef SHOWMATRIX_H_
#define SHOWMATRIX_H_

void ShowMatrix(int array[][], int W1, int W2);

#endif /* SHOWMATRIX_H_ */
0
رمز الاتصال خاطئ أيضًا. ليس من الواضح ما إذا كان الخطأ يأتي من الطالب أو المعلم. ما هو واضح ، هو أن هذا هو C90 وأن معرفة معلمي البرمجة C في جميع أنحاء العالم لا تزال سيئة للغاية.
وأضاف المؤلف Lundin, مصدر
أيضا ، فإن السؤال الثاني هو (أ) سؤال واحد أكثر من اللازم وينبغي أن ينشر بشكل منفصل و (ب) غامضة ميؤوس منها ؛ إذا كنت تريد المساعدة في خطأ ، اقتبس ذلك ؛ لا مجرد بادرة غامضة في ذلك.
وأضاف المؤلف underscore_d, مصدر
"أستاذنا" ، أخبره/هي عن الصفيف في void ShowMatrix (صفيف int [] [] ، int W1 ، int W2) ؛ IS NOT ARRAY. شكر. النموذج الأولي خاطئ ويجب أن يكون باطل ShowMatrix (int (* not_an_array) [10] ، int w1 ، int W2) ؛ ، التصويت لإغلاق الخطأ المطبعي البسيط
وأضاف المؤلف Stargateur, مصدر

2 إجابة

النموذج الأولي المحتوي على int array [] [] هو نوع غير كامل. هذا لن تجميع. إذا كنت لسبب ما يجب أن يكون لديك نوع غير مكتمل في العنوان (ليس لدي أي فكرة عن السبب وراء رغبتك في ذلك) ، فعندئذ يتعين عليك أن تعلن الصفيف على هيئة array [] [*] . سيؤدي ذلك إلى تجميع الشفرة ، لكنه لا يزال غير معقول.

والطريقة الصحيحة لإعلان الوظيفة هي:

void ShowMatrix(int W1, int W2, int array[W1][W2]);

يمكنك بعد ذلك استدعاء الوظيفة

ShowMatrix(W1, W2, array);

ولكن هذا يتطلب استخدام مترجم C قياسي. من خلال أسلوبك في الترميز ، يبدو أنك تتعلم استخدام إصدار قديم من C يبلغ من العمر 30 عامًا ، لذلك قد لا يعمل هذا من أجلك.

يجب عليك أن تسأل معلمك عن سبب قيامه بتعليمك المعرفة البرمجية من عام 1989 بدلاً من عام 2018.

0
وأضاف

المشكلة في الخطوط التالية:

  • ShowMatrix(array[][W2], W1, W2); in main function. Change it to ShowMatrix(array, W1, W2); Reason Parameter is mismatched. In function definition you stated that first parameter is a 2D array but you are not passing a 2D array.
  • void ShowMatrix(int array[][10], int W1, int W2) in function defintion. Change it to void ShowMatrix(int array[][W2], int lenD1, int lenD2). Reason W1 and W2 are compile time constants. They can not hold value passed to function. These should be some variable names. In int array[][W2], W2 is used just to as good programming practice
  • You need to change the function deceleration accordingly i.e. change void ShowMatrix(int array[][], int W1, int W2); to void ShowMatrix(int array[][W2], int lenD1, int lenD2) in ShowMatrix.h file. Reason Function deceleration should match function definition and vice versa.

يمكنك الاطلاع على رمز العمل الكامل هنا .

يتم تصحيح التعليمات البرمجية التالية. (سطر #include "ShowMatrix.h" تم التعليق عليه لأن بيئة الاستضافة لا تدعم انتشار الكود عبر ملفات متعددة):

#include 
#include 
//#include "ShowMatrix.h"

#define W1 10
#define W2 10

void ShowMatrix(int array[][W2], int lenD1, int lenD2)
{
    int a,b;
    for(a = 0; a < lenD1; ++a)
    {
        for(b=0; b< W1; ++a)
    {
        for(b=0; b

<�القوي> إخراج: </قوي>

Inhalt von Array[0][0] ist: 3 
Inhalt von Array[0][1] ist: 6 
Inhalt von Array[0][2] ist: 7
...
0
وأضاف
و لماذا هل هذه هي المشكلة؟
وأضاف المؤلف underscore_d, مصدر