ファイル入出力2.1

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Makoto

ファイル入出力2.1

#1

投稿記事 by Makoto » 6年前

ファイルから1行ずつ読み込んで行番号を付けて表示するための取っ掛かりを教えて頂けませんか?以下、問題文です。
実行例のようにコマンド引数に指定したテキストファイルを開き,ファイルから1行ずつ読み込んで行番号を付けて表示するプログラムを作成しなさい.コマンド引数が指定されなかった場合には,エラーメッセージを表示してプログラムを停止させること.
保存場所はinfo1 ファイル名はexC3.c
実行例(info1内にテキストファイルexC23.cが置いてあるとする)
% cat exC23.c ← テキストファイル exC23.c の内容を確認
#include <stdio.h>
int main(void)
{
char a[] = "Sample Text";
printf("%s¥n", a);
return 0;
}
% ./exC3 exC23.c ← テキストファイル名 exC23.c をコマンド引数に指定してプログラム実行
1: #include <stdio.h>
2:
3: int main(void)
4: {
5: char a[] = "Sample Text";
6:
7: printf("%s¥n", a);
8:
9: return 0;
10: }
% ./exC3 ← テキストファイル名が指定されていないときには,エラーメッセージを表示
ファイル名を指定して下さい
%

コード:

#include <stdio.h>

int main(void)
{
  FILE *fopen(char *exC23.c, char *r); 

  int argc;
  char *argv[1];
  
  int main(void)
  {
    char a[]="Sample Text"; 
  
    printf("%s\n", a);

    return 0;
  }
}

hide

Re: ファイル入出力2.1

#2

投稿記事 by hide » 6年前

取っ掛かりとしてはまず、動作させる環境をつくるところとかですかね。
前回に続いて動くプログラムになってないのですが、コンパイルとかしてないのでしょうか?
ちゃんと動かせる環境があるのならば、コンパイル時のエラーを読みましょう。
エラーの意味がわからなければ、エラーの内容をここで聞きましょうか。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: ファイル入出力2.1

#3

投稿記事 by みけCAT » 6年前

ファイルを読み込んでそのまま出力するプログラムです。

コード:

#include <stdio.h>

int main(int argc, char* argv[]) {
	FILE* fp;
	int input;
	if (argc < 2) {
		/* コマンド引数が指定されなかった場合 */
		fputs("エラーメッセージ\n", stderr);
		return 1;
	}
	/* ファイルを開く */
	fp = fopen(argv[1], "r");
	if (fp == NULL) {
		/* ファイルを開けなかった */
		fputs("ファイルオープンに失敗\n", stderr);
		return 1;
	}
	/* ファイルを読み込んで処理する */
	while ((input = getc(fp)) != EOF) {
		putchar(input);
	}
	fclose(fp);
	return 0;
}
行番号を付けるには、プログラム開始時または改行('\n')を読み込んだ後、次の文字を出力する前に行番号を出力する処理を追加すればいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: ファイル入出力2.1

#4

投稿記事 by かずま » 6年前

Makoto さんが書きました:

コード:

#include <stdio.h>

int main(void)
{
  FILE *fopen(char *exC23.c, char *r); 

  int argc;
  char *argv[1];
  
  int main(void)
  {
    char a[]="Sample Text"; 
  
    printf("%s\n", a);

    return 0;
  }
}
各行の意味を説明してください。
または、argv の意味が分かったはずだから、
プログラムを書き直してください。

Makoto

Re: ファイル入出力2.1

#5

投稿記事 by Makoto » 6年前

コード:

#include <stdio.h>
 
int main(void)
{
  FILE *fopen(char *exC23.c, char *r);  //ファイルexC23.cを読み込み用に開く
 
  int argc; //argcは引数の数
  char *argv[1]; //argv[1]は1番目の引数文字列
  
  int main(void)
  {
    char a[]="Sample Text";  //文字型の配列aにSample Textを代入
  
    printf("%s\n", a);
 
    return 0;
  }
}
プログラムは書き直しても、うまくいきませんでした。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: ファイル入出力2.1

#6

投稿記事 by purin52002 » 6年前

こんにちは

書き直したプログラムも張ってもらえると嬉しいです^^

今のままだと、以下の点が気にくわないです^p^

5行目:関数呼び出し時に変数宣言してる×2
7~8行目:main関数に引数はないけど引数の数とか文字列用の変数を宣言してる。(エラーではない)
10~17行目:main関数の中でmain関数を定義してる。(このmain関数はexC23.cに記述するべきでは?)
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: ファイル入出力2.1

#7

投稿記事 by Dixq (管理人) » 6年前

これ書き直してないコードですよね?間違いの投稿?
書き直したコードを提示して頂ければと思います。
回答やら不足部分やら必要なことは既に上の人達が言っていますが・・。

とりあえずmain関数が2つ存在することはできません。
関数の中に関数があるのもダメです。

コード:

#include <stdio.h>
 
int main(int argc, char* argv[])
{
	//ここ
	return 0;

}
これが基本となりますので、「//ここ」に処理を追加していくことになります。
ほぼ答えは既にみけCAT君が書いていますが、分からないところを教えてください。

返信

“C言語何でも質問掲示板” へ戻る