-PR-
解決
済み

C言語でプログラムを作成しなさい!といわれたんですが...

  • 困ってます
  • 質問No.52169
  • 閲覧数171
  • ありがとう数8
  • 気になる数0
  • 回答数7
  • コメント数0

◎プログラム仕様

C言語を使用

入力ファイルから1レコードを入力する。改行マークまで入力する。
2番目の「:」以前のデータを有効とする。
2番目の「:」からは、不要です。
出力ファイルへ出力する。
この処理を最終レコードまで行う。

処理の例
yoneko:ksgtgsmbnisysbnka:sjkmakshs7s:sksksk99jjs: 入力データ
yoneko:ksgtgsmbnisysbnka                出力データ

入力ファイル名・出力ファイル名は、任意に指定できるものとする。
入力ファイルの1レコード当たりの最大バイト数は、100バイトします。
それぞれの処理でエラーが発生した場合は、エラーの表示を行う。


を依頼されました。
まったく意味が分りません。
わかりやすく説明していたでけないでしょうか。
C言語、自体わかりません。
通報する
  • 回答数7
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.7
レベル14

ベストアンサー率 50% (1122/2211)

みっともない英文を書いたので、そのお詫びがてら、コメントを。


#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

コメントありがとうございます。
標準入出力とリダイレクトについて勉強中です。
投稿日時 - 2001-03-29 17:01:11
-PR-
-PR-

その他の回答 (全6件)

  • 回答No.2

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

ファイル入出力があるので、
ド素人では不可能です。


  • 回答No.3
レベル9

ベストアンサー率 30% (22/72)

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

C言語が解らなくて、このプログラム仕様がまったく意味がわからないのであれば、
無理でしょう。
説明しても、理解はできないのではないでしょうか?
もし、ここでコーディング例を書いて、それでお仕事をこなしたとしても、
お仕事であればメンテナンスも発生してくるでしょうし。。
理解できていないとメンテもできませんよね?

どういう経緯で依頼がきたのか解りませんが・・。

他の言語でプログラミングはできますか?
それともプログラミング自体がわからない??
madaraさんの知識の範囲がわかりませんので、なんとも・・・。
  • 回答No.4
レベル11

ベストアンサー率 34% (139/407)

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

実際のところ、学校の課題かなにかように見えるのですが・・・
答え自体は簡単ですが、勉強している人ならなおの事、お答えしかねます。(つめたいようですが・・・)
  • 回答No.6
レベル11

ベストアンサー率 31% (81/257)

a-kumaさんの回答素晴らしいのだけれど、英文のメッセージおかしくないですか? 私の英語力もメチャひどいのだけれど... 1)Excess:名詞です。ここに名詞がくるのはおかしいのでは?動詞であるExceeds(3人称単数、現在)、またはExceed?因みに昔読んだ米国人の書いたソースコード(=Fortran)では「Exceeds the limit」というような表現だったと思う。 ...続きを読む
a-kumaさんの回答素晴らしいのだけれど、英文のメッセージおかしくないですか?

私の英語力もメチャひどいのだけれど...

1)Excess:名詞です。ここに名詞がくるのはおかしいのでは?動詞であるExceeds(3人称単数、現在)、またはExceed?因みに昔読んだ米国人の書いたソースコード(=Fortran)では「Exceeds the limit」というような表現だったと思う。

2)byte--->bytes?(複数形)

私もFortran時代は、無理してインチキ英語でコメントやらメッセージを書いていたが、最近は日本語。日本人が読むのであればそれが一番です。書く方も楽。

madaraさんにも、それをオススメします。
  • 回答No.1
レベル11

ベストアンサー率 28% (32/111)

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

これくらいのプログラムなら、わかる人には30分もあれば作れると
思うのですが、これが仕事ならお金をもらわないと割りが合いません。

C言語をまったくわからない人に、わかりやすく説明するのは難しいと思います。
ちなみにどういう言語はOKなんですか?
  • 回答No.5
レベル14

ベストアンサー率 50% (1122/2211)

「答えて」系のサイトに書き込むのだから、他の方のように 質問者の背景や質問の理由は敢えて問いません。 素直じゃないところが何ヶ所かあるので、学校の課題だと 突っ込まれるところがあるかも。せめて、マニュアル程度を 引いて、意味を調べておくことをすすめます。 もし、仕事なら、それが研修の課題であろうと、実務であろ うと、意味が分かってないと、将来苦労するでしょうから やっぱり、少しは調べ ...続きを読む
「答えて」系のサイトに書き込むのだから、他の方のように
質問者の背景や質問の理由は敢えて問いません。

素直じゃないところが何ヶ所かあるので、学校の課題だと
突っ込まれるところがあるかも。せめて、マニュアル程度を
引いて、意味を調べておくことをすすめます。

もし、仕事なら、それが研修の課題であろうと、実務であろ
うと、意味が分かってないと、将来苦労するでしょうから
やっぱり、少しは調べておいた方が良いでしょうね。



#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さんのすばらしさがわからないのが残念です。
ただいま少しずつ勉強中です。
投稿日時 - 2001-03-21 09:47:30
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ