前提・実現したいこと
・前置き
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で開発をしております。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/06/03 02:34