Si no tienes un curso o libro de calidad sobre C te recomiendo conseguir uno, recomendaciones sobre ellos las puedes encontrar mediante el motor de búsqueda de los foros.
Tengo varias dudas al usar los apuntadores y la forma de acceder a las variables del struct. La forma en que lo estoy haciendo es correcta?
No. Debes primero utilizar el operador "[ ]" para acceder a un elemento del bloque y a continuación el operador "." para acceder al campo indicado. Por ejemplo el primer bucle se debe cambiar a:
for (x = 0; x < n; x++){
printf("Numero de paginas: "); scanf("%d", ®
[x
].
num_paginas); }
No tengo muy claro la diferencia entre estas dos formas.
reg->editorial
reg.editorial
La primera se utiliza si "reg" es un puntero, la segunda cuando no lo es.
En cuanto al programa tiene varios errores, algunos de ellos:
* Te falta el punto y coma después de la declaración de "struct libros" y el numero de paginas no debe ser un array. Hay que cambiar la declaración a:
struct libros {
char titulo[60];
char autor[60];
char editorial[60];
int num_paginas;
};
struct libros *reg;
* Te falta el operador "dirección de" (el '&') en la primera llamada a scanf:
scanf("%d",n
); /* Deberia ser scanf("%d", &n); */
* La función "cast" solo "pasa la cubeta" (llama a otra función), para el caso eliminala y llama a malloc directamente. Y no es necesario convertir el resultado de malloc al tipo apropiado.
* La función main se debe definir como "int main(void) ..." o "int main() ..." y su valor de retorno debe indicarse con al menos "return 0;". También hay que evitar el uso de gets y la biblioteca conio de Borland. Las razones de ello en el tema
|Lo que no hay que hacer en C/C++. Nivel basico|.
* El segundo bucle se debe modificar de forma similar al primero y en la impresión del numero de paginas:
printf("Numero de paginas: %s",reg
->num_paginas
);
Como ya te comente debes cambiar el tipo del campo "num_paginas" a int e imprimirlo utilizando el especificador "%d" ("%s" solo debe utilizarse para imprimir cadenas).
Un saludo