2017-01-06 2 views
0

Когда я запускаю этот код я получил эту ошибку: [Error] индексируются значение не является ни массивом, ни указатель, ни векторпередавая typdef-структуру в качестве параметра функции

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

/*Defined a data type named User with typedef*/ 
typedef struct User{ 
    char firstName[50]; 
    char lastName[50]; 
    int phonenumber; 
}user; 


int main(int argc, char *argv[]) { 

    user users[2];/*users defined "user" type*/ 

    strcpy(users[0].firstName,"furkan"); 

    strcpy(users[1].lastName,"xxxx"); 

    users[0].phonenumber = 1; 

    users[1].phonenumber = 2 ; 

    print_users(users); 

    return 0; 
} 

/*Function for printing user type users values*/ 
void print_users(user usr) 
{ 
    int j=0; 

    for(j=0;j<10;j++) 
    { 
     printf("%-10s%-20s%7d\n",usr[j].firstName,usr[j].lastName,usr[j].phonenumber); 
    } 
} 

я могу сделать эту функцию без ЬурейеГо но Интересно, если есть способ, чтобы это произошло

+1

Пожалуйста, возьмите [Tour] (https://stackoverflow.com/tour), научитесь создавать [MCVE] (https://stackoverflow.com/help/mcve) и проконсультироваться с вашей [Rubber Duck] (https://ericlippert.com/2014/03/05/как-to отлаживать-маленький-программы /). –

+0

Пропустите указатель с длиной массива struct –

ответ

1
void print_users(user *usr) 

это должно быть параметры, которые ваша функция получения, потому что внутри вашей функции вы acessing USR [J], так что это означает, что USR нужно быть указатель, а не сама структура.

ах, просто сказать, что ваш идет от 0 до 9 (10 позиций), а ваши выделенные 2 позиции.

+1

Пожалуйста, не просто укажите код, но * объясните *, какова была ошибка OP. –

+1

Спасибо, Габриэль, это решило проблему, и я также исправил счетчик циклов. – frknayk

1

Параметр Функция

void print_users(user usr); 
       ^^^^^^^ 

является скалярным объектом. Вы не можете применять оператор индекса для скалярного объекта.

Если вы хотите, чтобы функция связана с массивом, то вы должны объявить функцию, по крайней мере, как

void print_users(user usr[]); 
       ^^^^^^^^^^ 

Примите во внимание, что это не ясно, почему функция использует магическое число 10.

for(j=0;j<10;j++) 
     ^^^^^ 

в то же время в главном вы объявили массив только из двух элементов

user users[2]; 

Таким образом, это будет правильно объявить функцию как

void print_users(user usr[], size_t n); 

и использовать переменную n в петле

for(j=0;j < n;j++) 
     ^^^^^ 

Соответственно функция может быть названа как

print_users(users, 2); 
Смежные вопросы