-2

構造体の定義に問題があります。構文は理解できますが、正しく使用してプログラムを作成することはできません。私の割り当てはelement_t、周期表の要素の1つを表す構造タイプを定義することです。コンポーネントには、原子番号、名前、記号、クラス、重量、および各シェルの電子数の整数の7要素配列を含める必要があります。以下は、element_tナトリウムの構造の構成要素です。

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

scan_elementI/O機能とを定義してテストしprint_elementます。これが私のコードです...しかし、うまくいきません。element_tを初期化していないとコンパイラが言う理由がわかりません。前もって感謝します。

***次のコードで終わり、適切なループと&記号も追加されましたが、以下には示されておらず、すべてが正常に機能しました。私のクラスのパワーポイントスライドが、ループの代わりに{2 8 1 0 000}を使用してint配列にデータを入力する方法を知りたいと思いました。私が使用している本もループメソッドを使用していますが、{}の方法を試してみたかったのです。再度、感謝します。

#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;
}
4

1 に答える 1

0

コードにいくつかの問題があります。

1)scanf非ポインター型(intやfloatなど)で読み取る場合は、&演算子を使用します。Scanfには、変数自体ではなく、変数へのポインターが必要です。

2)文字列を動的(char *)として宣言する場合は、必ずmallocを使用して文字列にメモリを割り当ててください。それ以外の場合は、charmy_string[30]のように静的に宣言します。

3)scan_element関数は、intではなくelement_t構造体を返す必要があります。または、既存のelement_t構造体へのポインターを渡して、関数で変更することもできます。

4)scanf/printfを使用してint配列を直接読み取り/印刷することはできません。すべての要素を個別に読み取る必要があります。

5)scan_element関数にはおそらくprint_element:Pが含まれていてはなりません

ANSICのコンソールI/Oについて詳しく知りたい場合は、この記事が役立つかもしれません。

修正されたコードは次のとおりです。

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;
}
于 2012-11-20T03:01:56.210 に答える