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

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

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

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

Q&A

解決済

2回答

549閲覧

C言語 文字列とif文

ON_theashtray

総合スコア16

C

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

0グッド

0クリップ

投稿2022/04/28 05:02

編集2022/04/28 05:11

初学者です。
C言語で二つのテストの平均点が60点以上はpass、それ未満はfailと表示させ、さらにそのテストの平均点を少数の第一位まで表示させるプログラムを作りたいのですが、平均点は表示させられるのですが、合否が表示させられません。コンパイルエラーはありませんでした。
どこが間違えているのか教えてほしいです。よろしくお願いします。

C

1#include<stdio.h> 2#define NUM 100 3 4int main(){ 5 int test1,test2; 6 char t[NUM]; 7 printf("Enter the score of 1:"); 8 scanf("%d",&test1); 9 printf("Enter the score of 2:"); 10 scanf("%d",&test2); 11 if ((test1+test2)/2 >= 60) { 12 char t[NUM] = "pass"; 13 }else if(0<=(test1+test2)/2 & (test1+test2)/2<60){ 14 char t[NUM] = "fail"; 15 } 16 printf("%s\n%.1f\n",t,(double)(test1+test2)/2); 17 return 0; 18} 19 20

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

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

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

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

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

mather

2022/04/28 05:06

> 表示させられません。 質問をするときはこの部分をもっと具体的に書きましょう。 「平均点は表示されるが pass, fail が表示されない」「コンパイル時に警告が表示される」など。
ON_theashtray

2022/04/28 05:08

matherさん ご指摘ありがとうございます、追加させていただきます。
dodox86

2022/04/28 05:14

> どこが間違えているのか教えてほしいです。 何かの課題でしょうか。ご自身でデバッグして1行1行想定通り動作しているか確認しましたか? プログラム書いた→コンパイルした→実行した→思った通り動かない→質問しよう だと回答をいただいても理解できないことも多いです。
ON_theashtray

2022/04/28 05:21

dodox86さん ご指摘ありがとうございます。学校の課題です。これはその課題の中の一部分を質問用にしたものです。本当にわからなくてご指摘通りたくさんの試行を繰り返しても解決できなかったので質問させていただきました。
mather

2022/04/28 05:26

おそらく、コンパイル時の警告オプションを指定してないのかな、と推測されますが、 -Wallなどのコンパイルオプションを指定しておくと使い方のおかしい部分などを指摘してくれます。 https://zenn.dev/keitean/articles/28f1affef11e08#%E8%AD%A6%E5%91%8A%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3 また、学校の課題であるということならば、Teratailでは推奨されていませんし、わからない部分があるということを先生にも素直に伝えてください。
guest

回答2

0

c

1char t[NUM] = "pass";

この部分がおかしいです。これは新しく型宣言しているコードになってしまい、if文のスコープ内でしか使えない値になります。

修正例としては、 #include<string.h> を追加し、

c

1strcpy(t, "pass");

のように文字列のコピーとして書き換えることが一つ。

あるいは一定の文字列しか扱わないのであれば、

c

1char *t; 2t = "pass";

のように固定の文字列に対するポインタとして利用することが考えられます。

投稿2022/04/28 05:21

mather

総合スコア6753

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

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

ON_theashtray

2022/04/28 05:24

ありがとうございます。本当にわかりやすかったです。 ベストアンサーは早かった方にさせていただきました。
guest

0

ベストアンサー

ブロックの中でchar t[NUM] = "pass";としてしまうと、ブロックの中でのみ有効な新たな変数が作られてしまいます。外側のtに書き込むにはstrcpyを使いましょう。

なお、

  • どちらにも当てはまらない場合を想定するなら別ですが、elseifを書く必要は必ずしもありません。
  • &1つの演算子はビットごとのand演算子なので、(今回はたまたまうまくいきますが)真理値を扱うには向いていません。

投稿2022/04/28 05:16

maisumakun

総合スコア145201

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

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

ON_theashtray

2022/04/28 05:23

ありがとうございます。とてもわかりやすかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問