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

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

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

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

Q&A

解決済

2回答

704閲覧

//から始まるコメントを取り除くプログラムを作りたい

bigginner

総合スコア6

C

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

0グッド

0クリップ

投稿2021/10/26 08:50

C

1 2#include <stdio.h> 3#include <stdlib.h> 4int main(int argc, char *argv[]) 5{ 6FILE *fp; 7int i, ch; 8int state = 0; 9for (i = 1; i < argc; i++) { 10if ((fp = fopen(argv[i], “r”)) == NULL) { 11fprintf(stderr, “cannot open %s¥n”, argv[i]); 12exit(1); 13} 14while ((ch = getc(fp)) != EOF) { 15if (state == 0) { 16if (ch ==/) 17state = 1; 18else 19 20(1) 21 22} else if (state == 1) { 23if (ch ==/) 24state = 2; 25else { 26 27(2) 28 29state = 0; 30} 31} else { // state 2 32if (ch == ‘¥n’) { 33 34(3) 35 36state = 0; 37} 38} 39fclose(fp); 40} 41}

(1),(2),(3)を埋めてプログラムを完成させてください。知識不足ゆえ、ご教授ください。

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

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

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

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

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

BeatStar

2021/10/26 09:00 編集

> (1),(2),(3)を埋めてプログラムを完成させてください 自分でやるべきでは? 知識不足を理由に自分では一切やらずに、他人がやるのが当たり前なの? 知識不足だと感じるのなら知識を埋めることから先じゃないの? 回答者は金をもらってやっているのではありません。質問者と同じように一介のユーザーです。 それなのに自分ではやらずに他人がやるのが当たり前? そこまでやる気名が無いなら課題代行に金を払ってやってもらいましょう。 金を出し渋ってここで他人にさせるのが正しいのでしょうか。 まるで"初心者"とか"知識不足"を言い訳にして、自分は努力すら怠り、他人がやるのが当たり前と。何様でしょうか。普通なら知識不足なら知識を埋めるはずです。 しかも、真っ白な状態ではなく、ほとんど答えが書かれていて穴埋め状態。 これで『わからない』っていうのがおかしい。 確かに初心者マークついていますが、これは『初心者だから丸投げしてもいい』というものではありません。初心者 = 基礎をやり終えてある程度使えるレベル です。 ヒントなら出してもいいですが、おそらくそれを読んでも理解できないでしょうね。 だって、そのヒントだけで事足りるなら自分で解決できるはずだし。(今回の内容なら)
BeatStar

2021/10/26 09:03

まるで国際数学者会議とかに出席して、『すみません。足し算の宿題なのですが、回答してください』と言うようなものです。しかも会議中に。 KYだし、「いや、自分でやれよ」と言われるはずです。下手すれば警備員呼ばれます。 それなのに、『足し算ぐらい教えてくれてもいいだろ!!!』と暴れまわっているレベルです。 話になりません。せめて出席するのなら宿題は自分でやっておくべきです。
jimbe

2021/10/26 09:19

> 知識不足ゆえ どのような"知識"が不足していると思われますでしょうか。 またその知識不足を解消する為にどのような行動をされ、結果どうだったのでしょうか。
dodox86

2021/10/26 09:28 編集

なんかもうすごいですね。sedでいいんじゃないでしょうか。(よくない) sed -e 's|//.*||'
fana

2021/10/26 09:25

とりあえず シングルクォート/ダブルクォート が素敵なことになってるし, { と } の個数が合わない時点で,本来の構造が不明だし… というわけで,穴さえ埋めれば良い状態にすらなってない. あと,「//から始まるコメントを取り除く」って言われても,処理結果はどうするのか謎.
fj68

2021/10/26 09:26

宿題かなにかのようですが、biginnerさんが何を試したのかが書かれていないので、とりあえず課題をそのまま質問に出したように思えてしまいます。 もしすでに試したことがあったり「こういう処理が来るはず」と考えたことがあれば質問に追記しましょう。 そういったことをまだできていなければ(BeatStarさんがおっしゃっているように)ほとんど答えが書かれていますから、まずはソースコードをよく読んで、それぞれの場所にどんな処理がくればよいか自分で考えてみましょう。その上で「こんなことをしてみたけどダメだった」「ここをこうしたいけどこれだとうまくいかない。どうすればよいか」といった形で質問すると具体的な回答が得られるでしょう。 頑張ってください。
dodox86

2021/10/26 09:47

知識不足と言いますか完全に思考不足。考えることを放棄していますね。 行末'\n'まで1文字ずつ読んでいって、'/'が来たら1文字目、state=1、stateの訳は「状態」です。連続して'/'が来たら2つ目なので遷移してstate=2、で、途中で'/'ではない文字とか'\n'が来たら? 頭の中で考えて処理していくのとほぼ同じです。
BeatStar

2021/10/26 11:04 編集

『方向性が全くわからないが、やる気がある』のでしたら何か反応ください。 ちゃんとした反応があれば教えるつもりです。(時間とかにもよるが)
guest

回答2

0

自己解決

みなさんのおかげでやる気出ました!
printf("%c",ch);
だと思います

投稿2021/10/26 12:45

bigginner

総合スコア6

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

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

episteme

2021/10/26 14:22

「~と思います」では解決に至っていない。低評価。
fana

2021/10/27 03:04

> (1),(2),(3)を埋めて と言う話であれば,とりあえず3箇所埋める必要があると見えるが, これは3箇所全てを > printf("%c",ch); なる同一内容で埋めるという意味なのか?
guest

0

ひんと:

state=0 : コメントの外
state=1 : '/'を一個読んだ状態(コメントの内/外はまだわからん)
state=2 : コメントの内

です。
たとえば state=1で'/'を読んだら(// が検出できたので)state=2 にします。他も同様。

※ ただしこのコードでは "there is an '//' in this string" をコメントと誤認識しちゃいますね。

投稿2021/10/26 11:33

episteme

総合スコア16612

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問