◎プログラム仕様
C言語を使用
入力ファイルから1レコードを入力する。改行マークまで入力する。
2番目の「:」以前のデータを有効とする。
2番目の「:」からは、不要です。
出力ファイルへ出力する。
この処理を最終レコードまで行う。
処理の例
yoneko:ksgtgsmbnisysbnka:sjkmakshs7s:sksksk99jjs: 入力データ
yoneko:ksgtgsmbnisysbnka 出力データ
入力ファイル名・出力ファイル名は、任意に指定できるものとする。
入力ファイルの1レコード当たりの最大バイト数は、100バイトします。
それぞれの処理でエラーが発生した場合は、エラーの表示を行う。
を依頼されました。
まったく意味が分りません。
わかりやすく説明していたでけないでしょうか。
C言語、自体わかりません。
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 さんの
いう通り。
ただ、いんちきでも良いから、なるべく英語を近くにおいておく習慣を
つけておいた方が良いです。
日本語が表示できない環境はほとんど無いと言っても良いが、日本語を
入力できない環境はままあったりするし、なにしろ最新の情報は、まず
英語圏から発信されることが多い。
また、日本語のマニュアルの意味が良く分からないなあ、と思ったら、
テクニカルタームを良く知らない人が和訳をしているだけで、英語の
マニュアルでは意味が一目瞭然だったり。
なるべく書くようにしておけば、間違っていても、指摘をしてくれる人も
居るわけで (^^;
No.6
- 回答日時:
a-kumaさんの回答素晴らしいのだけれど、英文のメッセージおかしくないですか?
私の英語力もメチャひどいのだけれど...
1)Excess:名詞です。ここに名詞がくるのはおかしいのでは?動詞であるExceeds(3人称単数、現在)、またはExceed?因みに昔読んだ米国人の書いたソースコード(=Fortran)では「Exceeds the limit」というような表現だったと思う。
2)byte--->bytes?(複数形)
私もFortran時代は、無理してインチキ英語でコメントやらメッセージを書いていたが、最近は日本語。日本人が読むのであればそれが一番です。書く方も楽。
madaraさんにも、それをオススメします。
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;
}
ファイルの指定は、標準入出力を使っているので、リダイレクト
で指定してね。
# 「わかりやすく説明」という意味では、落第点の回答ですね
回答してくださってありがとうございます。
このプログラムがどういう意味なのかが分らないので
a-kumaさんのすばらしさがわからないのが残念です。
ただいま少しずつ勉強中です。
No.4
- 回答日時:
皆さんも言っておられるとおり仕事で来ているなら変ですね。
断るしかないでしょう。実際のところ、学校の課題かなにかように見えるのですが・・・
答え自体は簡単ですが、勉強している人ならなおの事、お答えしかねます。(つめたいようですが・・・)
No.3
- 回答日時:
こんにちは。
依頼された・・ということは、お仕事なのですか?
C言語が解らなくて、このプログラム仕様がまったく意味がわからないのであれば、
無理でしょう。
説明しても、理解はできないのではないでしょうか?
もし、ここでコーディング例を書いて、それでお仕事をこなしたとしても、
お仕事であればメンテナンスも発生してくるでしょうし。。
理解できていないとメンテもできませんよね?
どういう経緯で依頼がきたのか解りませんが・・。
他の言語でプログラミングはできますか?
それともプログラミング自体がわからない??
madaraさんの知識の範囲がわかりませんので、なんとも・・・。
No.2
- 回答日時:
C言語がわからないと、さっぱりだと思いますよ。
多分、基礎知識がないとどんな説明をしても
出来ないと思います。
何故こんな仕事が来たのかも疑問ですし。
これはもともとプログラマがするようなことですし。
(それほど難しくないけど)
ファイル入出力があるので、
ド素人では不可能です。
No.1
- 回答日時:
C言語がまったくわからない人に、何故こういう依頼が来たのでしょうか?
まずはここが疑問です。仕事ならなおさらです。
これくらいのプログラムなら、わかる人には30分もあれば作れると
思うのですが、これが仕事ならお金をもらわないと割りが合いません。
C言語をまったくわからない人に、わかりやすく説明するのは難しいと思います。
ちなみにどういう言語はOKなんですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) 複数の同じ様式のエクセルデータの任意セルへの入力について 3 2022/04/27 15:00
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル出力の場所を指定
-
コマンド(例えばls)の出力結果...
-
VC++でUTF-8のファイルを出力し...
-
外国語とCSVについて
-
OCRで起こしたテキスト文字をCS...
-
シェルコマンドの 2>&1 とはど...
-
FORTRANの出力データの左寄せが...
-
fortranのtxtファイル出力書式...
-
(VBA)書式が変更されてしまい...
-
二次元配列をクリップボードに...
-
Wordマクロで指定したフォルダ...
-
印刷時のジョブ名
-
VBAでエクセルをCSVに変換時
-
C言語で・・・・。
-
テキストの各行に行番号をつけ...
-
C++ fprintf_sの使い方がわからん
-
アクセス>マクロ>テキスト変換
-
サウンド出力のデバイスを選択...
-
「ファイルへ出力」とは?
-
CreateProcess関数と実行後の戻...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
Acccess レポートをグループ別...
-
VC++でUTF-8のファイルを出力し...
-
サウンド出力のデバイスを選択...
-
ファイルの文字コードをUTF-8に...
-
VBA でメモ帳へ保存する際の保...
-
ファイル出力の場所を指定
-
ファイル形式またはファイル拡...
-
テキストファイルに改行コード...
-
シェルコマンドの 2>&1 とはど...
-
Wordマクロで指定したフォルダ...
-
AccessVBA複数レポート条件毎に...
-
二次元配列をクリップボードに...
-
UNIX & Linux の標準出力で得た...
-
フォルダにあるPDF情報の抽出(VBA)
-
C++ BuilderでPDF出力
-
VBSでEXCEL⇒CSV変換で日付の書...
-
fortranのtxtファイル出力書式...
-
CBool関数について VB6とVB.net...
-
ワードからPDF変換でグラフが表...
おすすめ情報