• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語でプログラムを作成しなさい!といわれたんですが...)

C言語でプログラムを作成する方法

このQ&Aのポイント
  • C言語を使用してプログラムを作成する方法について説明します。
  • 入力ファイルから1レコードを入力し、不要なデータを除去して出力ファイルに保存する処理を行います。
  • エラーが発生した場合にはエラーの表示を行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.7

みっともない英文を書いたので、そのお詫びがてら、コメントを。 #include <string.h> #include <stdio.h> int main() {   char buf[1024];  /* 大き目に読込バッファをとっておく */   buf[101] = -99;  /* 超えてはいけないところに、ASCII文字以外のコードを埋めておく(番人) */   while (gets(buf)) /* 標準入力から一行読み込んで EOF かエラーを返すまで */   {     char* p;     if (buf[101] != -99) /* 番人として埋めたコードが置き換わっていたら、1レコードの制限を越えたと判断 */     {       fprintf(stderr, "input record maybe exceeds the limits (100 bytes).\n");       exit(1);     }     if (p = strchr(buf, ':'))  /* 最初に出てくる ':' の位置を p に入れる */     {       p = strchr(p + 1, ':'); /* 最初の ':' の次の位置から ':' を(つまり二個目)探す */       if (p)      /* 二個目の ':' があれば */         *p = '\0';  /* そこを文字列の終端にする */       /* 二個目の ':' が無ければ、入力レコードはそのまま */     }     /* 一個目の ':' が無ければ、入力レコードはそのまま */     puts(buf);       /* 二個目の ':' 以降をちょん切った文字列を標準出力に書き込み */     if (ferror(stdout))  /* 一応、書き込みエラーのチェック */     {       fprintf(stderr, "write error\n");       exit(1);     }   }   if (ferror(stdin))  /* 一応、gets() のエラーチェック */   {     fprintf(stderr, "read error\n");     exit(1);   }   return 0; } 後、マニュアルを読めば分かることですが、strchr() は、一つ目の引数で 示される位置から、二つ目の引数で示される文字を探す関数です。 もし、文字が見つかればその位置を、見つからなければ NULL を返します。 省略した書き方をしていますが、   if (p = strchr(buf, ':')) は、   if ((p = strchr(buf, ':')) != NULL) もっと(他の言語を知っているとして)わかりやすく書けば   char* pos;   pos = p = strchr(buf, ':');   if (pos != NULL) です。 後、いんちき英語についても弁解をしておこう。 「日本語の方がわかりやすい」ということについては、ametsuchi さんの いう通り。 ただ、いんちきでも良いから、なるべく英語を近くにおいておく習慣を つけておいた方が良いです。 日本語が表示できない環境はほとんど無いと言っても良いが、日本語を 入力できない環境はままあったりするし、なにしろ最新の情報は、まず 英語圏から発信されることが多い。 また、日本語のマニュアルの意味が良く分からないなあ、と思ったら、 テクニカルタームを良く知らない人が和訳をしているだけで、英語の マニュアルでは意味が一目瞭然だったり。 なるべく書くようにしておけば、間違っていても、指摘をしてくれる人も 居るわけで (^^;

noname#1264
質問者

お礼

コメントありがとうございます。 標準入出力とリダイレクトについて勉強中です。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.6

a-kumaさんの回答素晴らしいのだけれど、英文のメッセージおかしくないですか? 私の英語力もメチャひどいのだけれど... 1)Excess:名詞です。ここに名詞がくるのはおかしいのでは?動詞であるExceeds(3人称単数、現在)、またはExceed?因みに昔読んだ米国人の書いたソースコード(=Fortran)では「Exceeds the limit」というような表現だったと思う。 2)byte--->bytes?(複数形) 私もFortran時代は、無理してインチキ英語でコメントやらメッセージを書いていたが、最近は日本語。日本人が読むのであればそれが一番です。書く方も楽。 madaraさんにも、それをオススメします。

すると、全ての回答が全文表示されます。
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.5

「答えて」系のサイトに書き込むのだから、他の方のように 質問者の背景や質問の理由は敢えて問いません。 素直じゃないところが何ヶ所かあるので、学校の課題だと 突っ込まれるところがあるかも。せめて、マニュアル程度を 引いて、意味を調べておくことをすすめます。 もし、仕事なら、それが研修の課題であろうと、実務であろ うと、意味が分かってないと、将来苦労するでしょうから やっぱり、少しは調べておいた方が良いでしょうね。 #include <string.h> #include <stdio.h> int main() {   char buf[1024];   buf[101] = -99;   while (gets(buf))   {     char* p;     if (buf[101] != -99)     {       fprintf(stderr, "input record maybe excess 100 byte.\n");       exit(1);     }     if (p = strchr(buf, ':'))     {       p = strchr(p + 1, ':');       if (p)         *p = '\0';     }     puts(buf);     if (ferror(stdout))     {       fprintf(stderr, "write error\n");       exit(1);     }   }   if (ferror(stdin))   {     fprintf(stderr, "read error\n");     exit(1);   }   return 0; } ファイルの指定は、標準入出力を使っているので、リダイレクト で指定してね。 # 「わかりやすく説明」という意味では、落第点の回答ですね

noname#1264
質問者

お礼

回答してくださってありがとうございます。 このプログラムがどういう意味なのかが分らないので a-kumaさんのすばらしさがわからないのが残念です。 ただいま少しずつ勉強中です。

すると、全ての回答が全文表示されます。
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.4

皆さんも言っておられるとおり仕事で来ているなら変ですね。断るしかないでしょう。 実際のところ、学校の課題かなにかように見えるのですが・・・ 答え自体は簡単ですが、勉強している人ならなおの事、お答えしかねます。(つめたいようですが・・・)

すると、全ての回答が全文表示されます。
  • korei
  • ベストアンサー率30% (22/72)
回答No.3

こんにちは。 依頼された・・ということは、お仕事なのですか? C言語が解らなくて、このプログラム仕様がまったく意味がわからないのであれば、 無理でしょう。 説明しても、理解はできないのではないでしょうか? もし、ここでコーディング例を書いて、それでお仕事をこなしたとしても、 お仕事であればメンテナンスも発生してくるでしょうし。。 理解できていないとメンテもできませんよね? どういう経緯で依頼がきたのか解りませんが・・。 他の言語でプログラミングはできますか? それともプログラミング自体がわからない?? madaraさんの知識の範囲がわかりませんので、なんとも・・・。

すると、全ての回答が全文表示されます。
noname#5824
noname#5824
回答No.2

C言語がわからないと、さっぱりだと思いますよ。 多分、基礎知識がないとどんな説明をしても 出来ないと思います。 何故こんな仕事が来たのかも疑問ですし。 これはもともとプログラマがするようなことですし。 (それほど難しくないけど) ファイル入出力があるので、 ド素人では不可能です。

すると、全ての回答が全文表示されます。
  • rally
  • ベストアンサー率28% (32/111)
回答No.1

C言語がまったくわからない人に、何故こういう依頼が来たのでしょうか? まずはここが疑問です。仕事ならなおさらです。 これくらいのプログラムなら、わかる人には30分もあれば作れると 思うのですが、これが仕事ならお金をもらわないと割りが合いません。 C言語をまったくわからない人に、わかりやすく説明するのは難しいと思います。 ちなみにどういう言語はOKなんですか?

すると、全ての回答が全文表示されます。

関連するQ&A