🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

547閲覧

AtCoder のビギナー184の問題

iyonegaki

総合スコア19

C

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/12/25 10:50

編集2020/12/25 10:52

以下のような問題を解こうとしています。

問題文

高橋くんは、 N問のクイズに答えます。
高橋くんの持っている点数ははじめ X点で、クイズに正解すると1点増え、不正解だと1点減ります。
ただし、持っている点数が0点のときに不正解となった場合は点数は減りません。
高橋くんのクイズの結果が文字列Sで与えられます。
Sの左からi番目の文字が o のとき、i問目が正解だったことを、 x のとき、i問目が不正解だったことを表します。
高橋くんの最終的な点数はいくつでしょうか?

入力

入力は以下の形式で標準入力から与えられる。

N X S

出力

高橋くんの最終的な点数を出力せよ。

入力例 1

3 0 xox

出力例 1

0

入力例 2

20 199999 oooooooooxoooooooooo

出力例 2

200017

入力例 3

20 10 xxxxxxxxxxxxxxxxxxxx

出力例 3

0

自分のコード

#include <stdio.h> int main(){ int num, score, i; scanf("%d %d", &num, &score); char s[num]; scanf("%s", s); for( i = 0; i < num; i++ ){ if(s[i] == 'o'){ score++; }else if(s[i] == 'x'){ if(score != 0){ score--; } } } printf("%d", score); return 0; }

提出すると3/10の間違いがあったのですが、間違いがわかりません。
入力例はすべて通りました。

改善点を教えていただきたいです。

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

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

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

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

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

guest

回答2

0

numは問題数(sの文字数)です。
文字列sの定義はNULLを含むサイズを指定する必要があります。

c

1 char s[num + 1]; /* num + 1 です*/

投稿2020/12/25 12:52

akiruno-oneone

総合スコア815

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

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

iyonegaki

2020/12/26 04:36

できました、ありがとうございます。
guest

0

ベストアンサー

scanf("%d %d", &num, &score);

これで、入力文字数を入れてるつもりのようですが、これで入力可能文字数は、num-1文字というところに注意してください
C言語における文字列、というのは、終端に'\0'文字を置いた文字配列、ですんで、20文字分のバッファに格納可能な文字列の文字数は19文字となり、20文字入れるとアクセス違反となります

と、そのコードを見たときのまずいところですが、
ここでバッファのサイズを入れるというのはその課題に含まれてることなんですかね?

投稿2020/12/25 12:01

y_waiwai

総合スコア88038

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

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

iyonegaki

2020/12/26 04:37

問題はそのまま載せたので特にそのような文言はありませんでした。 未熟者なのでわからないのですが、バッファのサイズを入れてしまうのはまずいことでしょうか?
y_waiwai

2020/12/26 07:25

まあ、こういう演習問題の場合はどうかはわかりませんが、 業務の場合、入力し過ぎでメモリ違反するというコードは許されませんね
iyonegaki

2020/12/27 13:10

なるほど、こういう場合は業務的な観点から見たらどういうコードがいいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問