質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1099閲覧

c言語 自己参照型構造体

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/06/03 01:46

前提・実現したいこと

・前置き
https://www.grapecity.com/developer/support/powernews/column/clang/031/page02.htm 主にこのサイトを拝見し、自己参照型構造体を再度理解しようとしています。2年前に学んだものなので記憶がかなり曖昧です。
また、実現したいプログラムは大きく作りたいものを簡略化したものです。なぜこんなプログラムの書き方なのかという疑問には簡略化したもので自己参照型構造体を理解しようとしていると把握をお願いいたします。
・実現したいこと
テストの合計点を入力から受け取り、構造体のメンバに保存。その値が0未満ならば入力を終了する。入力が完全に終了次第、その後メンバの値を表示する。(説明が下手で申し訳ありません。)

発生している問題・エラーメッセージ

sample1.c: In function 'main': sample1.c:21:21: warning: assignment to 'struct result *' from incompatible pointer type 'result *' {aka 'struct test_result *'} [-Wincompatible-pointer-types] 21 | p->next = (result*)malloc(sizeof(result)); | ^ sample1.c:22:15: warning: assignment to 'result *' {aka 'struct test_result *'} from incompatible pointer type 'struct result *' [-Wincompatible-pointer-types] 22 | p = p->next; | ^ sample1.c:36:11: warning: assignment to 'result *' {aka 'struct test_result *'} from incompatible pointer type 'struct result *' [-Wincompatible-pointer-types] 36 | p = p->next; | ^

このエラーが発生しており、エラー文を検索してもうまくヒットせず。。という状況です。

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(void){ 5 typedef struct test_result{ 6 int sum; 7 struct result *next; 8 }result; //構造体定義 9 10 int count = 0; //カウンタ 11 result *p,*head; //構造体型ポインタ 12 13 while(1){ 14 //1回目のループ処理-先頭の構造体を生成 15 if(count == 0){ 16 p = (result*)malloc(sizeof(result)); 17 head = p; 18 } 19 //2回目以降のループ処理-構造体へのポインタをnextに保存 20 else{ 21 p->next = (result*)malloc(sizeof(result)); 22 p = p->next; 23 } 24 25 scanf("%d",p->sum); 26 if(p->sum < 0) break; 27 count++; 28 } 29 30 /* 構造体のリンクをたどって先頭からメンバを表示 */ 31 p = head; //ポインタを先頭に 32 while(p != NULL){ 33 printf("%d\n",p->sum); 34 p = p->next; 35 } 36 p->next = NULL; 37} 38

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

vscodeで開発をしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

typedef struct test_result{
int sum; struct result *next; }result; //構造体定義

struct result ってのは存在しないですね
struct test_result にしましょう

投稿2020/06/03 01:51

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/03 02:34

ものすごく初歩的なミスをしてしまったおりました。指摘してくださり大変ありがとうございました。
guest

0

typedef struct test_result { int sum; struct test_result* next; /* result -> test_result */ }result; //構造体定義

投稿2020/06/03 01:51

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/03 02:35

こんな初歩的なミスに対して指摘をしてくださり、本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問