2013-08-15 3 views
-1
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
struct books 
{ 
    char book_name[100]; 
    char book_author[100]; 
    int book_id; 
}; 
void print(int j,book[j]) 
{ 
     printf("The name of book %d is %s",j,book.book_name); 
     printf("\nThe author of book %d is %s",j,book.book_author); 
     printf("\nThe id of book %d is %d",j,book.book_id); 
} 
int main() 
{ 
    int b; 
    printf("Enter the number of books :"); 
    scanf("%d",&b); 
    for(int i=1;i<=b;i++) 
    { 
     struct books book[i]; 
     printf("Enter the details of book %d /n",i); 
     printf("Enter the book %d name:",i); 
     scanf("%s",&book[i].book_name); 
     printf("\n Enter the author of book %d :",i); 
     scanf("%s",&book[i].book_author); 
     printf("\n Enter the id of book %d :",i); 
     scanf("%d",&book[i].book_id); 
    } 
    printf("\n The details of the books you entered are given below:\n"); 
    for(int j=1;j<=b;j++) 
    { 
     print(int j,book[j]); 
    } 
    getch(); 
return 0; 
} 

ERRor: -> [Error] «книга» не был объявлен в этой области в функции печати ... Как я могу изменить масштаб объекта STRUCT к глобальному? Я создаю библиотеку, такую ​​как среда, и печатаю имя книги и ее детали, используя структуры. Но создаваемые объекты выходят за рамки scope.it, как в журнале ошибок. Помогите мне решить prblm.получения ошибок и помочь мне решить этот гр

+1

Вообще, поставить символ новой строки в конце каждого 'Е()' заявление. Не ставьте его в начале; не оставляйте последнюю строку вывода без новой строки. Все остальное в стороне, выход не гарантируется на экране, пока вы не выведете новую строку (хотя функции ввода, такие как 'getch()' и 'scanf()' часто делают flush 'stdout' перед чтением любого ввода. –

ответ

0
void print(int j,book[j]) 

должен быть

void print(int j , struct books *books) 

и это

printf("The name of book %d is %s",j,book.book_name); 
    printf("\nThe author of book %d is %s",j,book.book_author); 
    printf("\nThe id of book %d is %d",j,book.book_id); 

должен быть

printf("The name of book %d is %s",j,books-<book_name); 
    printf("\nThe author of book %d is %s",j,books->book_author); 
    printf("\nThe id of book %d is %d",j,books->book_id); 

и здесь вам нужно изменить:

print(int j,book[j]); 

в

print(int j, &book[j]); 

Когда вы объявляете функцию как здесь

void print(int j,book[j]) 

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

+0

Извините, Я забыл добавить его. :) – Devolus

+0

Ожидаемое первичное выражение перед [токеном. –

+0

Обратите внимание, что вызов функции - 'print (j, book [j]);' который передает структуру по значению, а не как указатель. Он также передает фактическую книгу, а не начало массива. Таким образом, вы могли бы иметь 'void print (int j, struct books book)' и вызов как написанный в данный момент, или вы могли бы использовать 'void print (int j, struct books * book)' и изменять инструкции печати, такие как 'printf («Имя книги% d - это% s», j, book-> book_name); 'и вызов типа' print (j, & book [j]); '. Я не уверен, что я понимаю ошибку «первичного выражения» - это не выглядит разумным. –

2

Исправлен код: - см комментарии

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
struct books 
{ 
    char book_name[100]; 
    char book_author[100]; 
    int book_id; 
}; 
void print(int j,struct books book) //Fix arguments use the struct 
{ 
     printf("The name of book %d is %s",j,book.book_name); 
     printf("\nThe author of book %d is %s",j,book.book_author); 
     printf("\nThe id of book %d is %d",j,book.book_id); 
} 
int main() 
{ 
    int b; 
    printf("Enter the number of books :"); 
    scanf("%d",&b); 
    struct books book[b]; // Declare the array of struct outside. 
    for(int i=1;i<=b;i++) 
    { 
     // Use \n not /n for newline 
     printf("Enter the details of book %d \n",i); 
     printf("Enter the book %d name:",i); 

     scanf("%s",book[i].book_name); // Remove & sign, %s expects a char * 
     printf("\n Enter the author of book %d :",i); 

     scanf("%s",book[i].book_author); // Remove & sign, %s expects a char * 
     printf("\n Enter the id of book %d :",i); 
     scanf("%d",&book[i].book_id); 
    } 
    printf("\n The details of the books you entered are given below:\n"); 
    for(int j=1;j<=b;j++) 
    { 
     print(j,book[j]); 
    } 
    getch(); 
return 0; 
} 
+0

Обратите внимание на остаточные проблемы (как в исходном коде, так и в вашей ревизии), что имя книги не может содержать пробелов и что имя автора не может содержать пробелов. Кроме того, вызовы 'scanf()' никогда не проверяются, чтобы обеспечить чтение данных. –