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

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

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

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

1442閲覧

C言語:構造体を用いたstackの実現

mizutani.cs

総合スコア4

C

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2021/11/10 07:53

編集2021/11/10 07:57

C言語:構造体を用いたstackの実現

構造体を用いてstackを作成しているのですが、main関数内での取り扱いが分かりません。
errorが示しているのは「該当のソースコード」で「//」がついた行です。

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

error: 'buf' undeclared (first use in this function) while(fgets(buf,sizeof(buf),stdin) != NULL) { ^ note: each undeclared identifier is reported only once for each function it appears in error: invalid type argument of '->' (have 'struct stack') if(s -> contents[128] != 0){ ^ error: invalid type argument of '->' (have 'struct stack') for(t = 0; t < (s -> top); t++){ ^ error: subscripted value is neither array nor pointer nor vector printf("[%d]", s[t]);

該当のソースコード

C

1typedef char elementtype; 2struct stack{ 3 int top; 4 elementtype contents[MAXSTACK]; 5}; 6 7int main(){ 8 struct stack s; 9 int i; 10 int t; 11 initstack(&s); 12 **while(fgets(buf,sizeof(buf),stdin) != NULL) {** //bufの定義を 13 if(buf[0]=='p'){ 14 if(stackempty(&s) == 1){ 15 printf("Underflow\n"); 16 exit(1); 17 }else{ 18 pop(&s); 19 } 20 }else{ 21 if(s -> contents[128] != 0){ //スタックが埋まっているならば 22 printf("Overflow\n"); 23 exit(1); 24 }else{ 25 sscanf(buf,"%d", &i); 26 push(&s, i); 27 } 28 } 29 for(**t = 0; t < (s -> top); t++**){ //スタック配列内を0からtopまで 30 **printf("%d,", s[t])**;     //main関数内での配列の扱い 31 } 32 } 33 return 0; 34}

補足

pop等、各関数内では
elementtype pop(struct stack *p){
p -> contents[p -> top] = 0;
p -> top--;
}
のように作成できたのですが、main内での配列の扱い方が理解できていません。
また、各errorの内容の理解はできるですが、具体的にどうすればよいかが分かりません。

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

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

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

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

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

guest

回答2

0

最初のエラーに関してはエラーメッセージ通りです.

error: 'buf' undeclared (first use in this function)

唐突に出てきた buf って何ですか? という.


残りに関しては,

struct stack s; に対して,
s-> とか s[t] とか書いている時点で文法が間違っています.

構造体を用いて…

という話ですが,構造体を用いて何かをするためには,まず構造体に関する文法を学んでください

投稿2021/11/10 08:07

fana

総合スコア11658

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

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

mizutani.cs

2021/11/10 08:22

char buf[128]; と定義し、構造体についてももう一人の回答者様の解説で理解することができました。ありがとうございます。
guest

0

ベストアンサー

  • p はポインタなので、その中のメンバーを参照するには -> を使いますが、s はポインタではないので、メンバーの参照には . を使います。

s[t]

  • s は配列ではありません。s.contents[t] でしょう。

投稿2021/11/10 08:06

int32_t

総合スコア20882

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

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

mizutani.cs

2021/11/10 08:14

詳しい回答ありがとうございます。 sについて、s.topやs.contents[]を使うことでその点のエラーは対処することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問