2013-11-11 3 views
-1

Я пытаюсь вызвать значения, хранящиеся в temp[z], а затем отобразить их с помощью функции. Вот код:Вызов массива внутри функции

/* File: StudentID_Surname.c - e.g. 1234567_Wilson.c 
* This program finds the range between highest and lowest value of a 2-D array */ 

#include <stdio.h> 

#define NROW 3 
#define NCOL 3 

/* Write a function 
    void disp_arr(int a[NROW][NCOL]) { ... } 
    where a[][] is the 2-D array 
    Print the entire array to the screen. */ 

disp_arr(int temp); 

int main(void) 
{ 
    /* declare needed variables or constants, e.g. */ 
    int ar[NROW][NCOL]; 
    int rows, cols; 
    int z = 0; 
    int temp[z] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */ 

    /* prompt for the user to enter nine positive integers to be stored into the array */ 

    for (rows = 0 ; rows < 3 ; rows++) 
    { 
     for (cols = 0 ; cols < 3 ; cols++) 
      { 
       printf( "Please enter 9 positive integers : "); 

       scanf("%d", &ar[rows][cols]); 

       /* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/ 
       temp[z] = ar[rows][cols]; 

       z += 1; /* Increase the array in temp[z] */ 
      } 
     printf("\n"); 
    } 

    /* Call disp_arr to display the 3 x 3 board */ 
    disp_arr(temp[z]); 



}/* end main */ 

disp_arr(int storedValue) 
{ 
    int x,y; 
    for ( x = 0 ; x < 3 ; x++) 
    { 
     for ( y = 0 ; y < 3 ; y++) 
     { 
      printf("%d\t", storedValue); 
     } 
     printf("\n%d"); 
    } 


    return storedValue; 
} 

Когда я пытаюсь выполнить код, мой компилятор дает мне ошибку, показанную в приложении. Я думаю, что код int temp[z] = {1,2,3,4,5,6,7,8,9}; был его источником.

Может ли кто-нибудь дать мне несколько указателей?

+0

'ошибку, показанную в attachment' - я не могу найти ошибку в исходном коде, ни в должности, где это? –

+0

Вы не * вызываете * массивы. Вы определяете, объявляете, получаете доступ или изменяете их. –

+0

И ваш код имеет неопределенное поведение, даже в стандартах, принимающих VLA-s. Вы хотите «int z = 9;» по крайней мере. –

ответ

1

int temp[z] пытается создать VLA. C89 не поддерживает массивы переменной длины. Скорее всего, ваш компилятор не поддерживает VLA - пожалуйста, ознакомьтесь с руководством. Другая проблема заключается в том, что размер вашего массива неправильный int z = 0;. Из-за чего вы получите предупреждение:

избыточных элементов в массиве инициализаторе

Поскольку ваш массив содержит 9 элементов, в то время как вы настроите z в 0. Вы должны иметь z, инициализированный как минимум 9. Кроме того, вы выходите за пределы в цикле

temp[z] = ar[rows][cols]; // ---> z goes out of bounds here 

Initialize z к 0 непосредственно перед началом цикла и проверять границы массива. Также printf("\n%d"); ожидает аргумент, как printf("\n%d", someint); - если только предназначена для печати на новую строку затем удалить %d как этот printf("\n");

0

У вас есть очень основные ошибки в коде

1.int темп [г] = {1, , 2,3,4,5,6,7,8,9}; должно быть

INT Темп [9]

2.disp_arr (интермедиат storedValue)

disp_arr (интермедиат * storedValue)

3.disp_arr (температура [г]);

disp_arr (температура)

4.printf ("Пожалуйста, введите 9 положительных целых чисел:"); должно быть перемещено, прежде вложенного цикл

0

В вашем основном коде, который вы пытаетесь 1) создать массив нулевого размера при г = 0 2) ИНТ г должен быть постоянным, так что он может быть использован для создания массив

Я думаю, что это будет делать это

int ar[NROW][NCOL]; 
    int rows, cols; 
    const int z = 9; 
    //int temp[z] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */ 
    //commented the above line and changed the code 
    int temp[z] ; 
    memset(temp, 0, z*sizeof(int)); 

    /* prompt for the user to enter nine positive integers to be stored into the array */ 
    int index = 0; 
    for (rows = 0 ; rows < 3 ; rows++) 
    { 
     for (cols = 0 ; cols < 3 ; cols++) 
      { 
       printf( "Please enter 9 positive integers : "); 

       scanf("%d", &ar[rows][cols]); 

       /* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/ 
       temp[index] = ar[rows][cols]; 

       index += 1; /* Increase the array in temp[z] */ 
      } 
     printf("\n"); 
    } 

    /* Call disp_arr to display the 3 x 3 board */ 
    disp_arr(temp[z]); 
+0

Я все еще получаю эти ошибки: [основные ссылки] (http://s21.postimg.org/564rrpp//rr.png) –

+0

игнорировать ошибку(). Я исправил его ~~ –

+0

также вам нужно изменить функцию disp_arr, чтобы она отображала все элементы массива – kunal

Смежные вопросы