2012-11-20 2 views
-2

J'ai des problèmes avec les définitions de structure. Je comprends la syntaxe mais je ne peux pas l'utiliser correctement pour faire un programme de travail. Mon devoir est de définir un type de structure element_t pour représenter l'un des éléments de la table périodique. Les composants doivent inclure un nombre atomique, un nom, un symbole, une classe, un poids et un tableau à sept éléments d'entiers pour le nombre d'électrons dans chaque coquille. Ce qui suit sont les composants d'une structure element_t pour le sodium.Définition de la structure initialisée

11 Sodium Na alkali_metal 22.9898 2 8 1 0 0 0 0 

Define et fonctions E/S essai scan_element et print_element. Voici mon code ... mais pas utile. Je ne comprends pas pourquoi le compilateur dit que je n'ai pas initialisé element_t. Merci d'avance.

*** Terminé avec le code suivant, a également ajouté les boucles appropriées et les signes & bien qu'il ne soit pas montré ci-dessous et tout a bien fonctionné. J'étais curieux de savoir comment les diapositives powerpoint de ma classe utilisaient {2 8 1 0 0 0 0} pour remplir le tableau int au lieu d'une boucle. Le livre que j'utilise utilise aussi la méthode de la boucle, mais je voulais essayer la {} façon de le faire. Merci encore.

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

typedef struct { 
    int atomic_num; 
    char* element_name; revised: char element_name[25]; 
char* element_symbol; revised: element_symbol[2]; 
    char* element_class; revised: char element_class[25]; 
    double atomic_weight; 
    int electrons[7]; 
} element_t; 

int scan_element(); revised: element_t scan_element(); 
void print_element(element_t my_element); 

int scan_element() { 
    element_t my_element; 

    printf("Enter Atomic Number> "); 
    scanf("%d", my_element.atomic_num); 

    printf("Enter Element Name> "); 
    scanf("%s", my_element.element_name); 

    printf("Enter Element Symbol> "); 
    scanf("%s", my_element.element_symbol); 

    printf("Enter Element Class> "); 
    scanf("%s", my_element.element_class); 

    printf("Enter Atomic Weight> "); 
    scanf("%lf", my_element.atomic_weight); 

    printf("Enter Electons in each shell> "); 
    scanf("%d", my_element.electrons); 

    print_element(my_element); 
    return 0; 
} 

void print_element(element_t my_element) { 
    printf("%d %s %s %s %lf %d \n",my_element.atomic_num,my_element.element_name, my_element.element_symbol,my_element.element_class,my_element.atomic_weight,&my_element.electrons); 
} 

int main() 
{ 
    scan_element(); revised: print_element(scan_element()); 

    return 0; 
} 
+0

S'il vous plaît poster votre erreur et réduire votre code au moins par exemple possible. – djechlin

+0

Selon vous, quelle partie initialise votre element_t my_element? –

Répondre

0

J'ai identifié quelques problèmes dans votre code:

1) Lors de la lecture avec scanf types non-pointeur (comme int ou float), utilisez l'opérateur &. Scanf a besoin d'un pointeur vers votre variable, pas la variable elle-même.

2) Si vous déclarez vos chaînes comme dynamiques (char *), assurez-vous d'utiliser malloc pour leur allouer de la mémoire. Sinon, déclarez-les statiquement comme char my_string [30].

3) Votre fonction scan_element doit retourner une structure element_t, pas un int. Vous pouvez également passer un pointeur sur une structure element_t existante et la modifier dans votre fonction.

4) Vous ne pouvez pas lire/imprimer un tableau int directement en utilisant scanf/printf. Chaque élément doit être lu séparément.

5) Votre fonction scan_element ne doit pas contenir probablement print_element: P

Si vous voulez en savoir plus sur la console d'E/S dans la norme ANSI C, peut-être this article pourrait être utile.

Voici le code corrigé:

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

typedef struct { 
    int atomic_num; 
    char element_name[30]; 
    char element_symbol[3]; 
    char element_class[30]; 
    double atomic_weight; 
    int electrons[7]; 
} element_t; 

element_t scan_element(); 
void print_element(element_t my_element); 

element_t scan_element() { 
    int i = 0; 
    element_t my_element; 

    printf("Enter Atomic Number> "); 
    scanf("%d", &my_element.atomic_num); 

    printf("Enter Element Name> "); 
    scanf("%s", my_element.element_name); 

    printf("Enter Element Symbol> "); 
    scanf("%s", my_element.element_symbol); 

    printf("Enter Element Class> "); 
    scanf("%s", my_element.element_class); 

    printf("Enter Atomic Weight> "); 
    scanf("%lf", &my_element.atomic_weight); 

    for(i = 0; i<7; i++) 
    { 
     printf("Enter Electon - electron nr %d\n",i); 
     scanf("%d", &my_element.electrons[i]); 
    } 

    return my_element; 
} 

void print_element(element_t my_element) { 
    int i; 
    printf("%d %s %s %s %lf\n", 
      my_element.atomic_num, 
      my_element.element_name, 
      my_element.element_symbol, 
      my_element.element_class, 
      my_element.atomic_weight); 
    for(i = 0; i<7; i++) 
    { 
     printf("%d",my_element.electrons[i]); 
    } 
    puts("\n"); 
} 

int main() 
{ 
    element_t val = scan_element(); 
    print_element(val); 

    return 0; 
} 
Questions connexes