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

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

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

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

受付中

ファイルの先頭から指定した行数分表示するときコマンド数が2の時10行表示するには

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

1回答

0評価

0クリップ

3256閲覧

投稿2017/11/02 11:41

>conhead test.c -n5で→test.c ファイルの中身を先頭から5行表示するプログラムで  >conhead test.cとしたとき、デフォルトで10行表示したいのですが、うまくいきません。main()のelse if(argc<3)を書き換えればいいと思うのですが、どのようにすればいいでしょうか。 コード #include <stdio.h> #include <stdlib.h> // exit()のため必要 #include <string.h> int put_data(int m) { FILE *fin; FILE *fout; char InputFileName[256]; // 読み込みファイル名 char OutputFileName[256]; // 書き出しファイル名 char textbuffer[512]; // テキストを読み込む作業用文字列 int line_no=1; printf("読み込みファイル名 : "); gets(InputFileName); // 読み込みファイル名の取得 printf("書き出しファイル名 : "); gets(OutputFileName); // 書き出しファイル名の取得 fin=fopen(InputFileName,"r"); if (fin==NULL) { printf("can't open file <%s>\n",InputFileName); exit(1); //ファイルオープンエラーで緊急停止 } fout=fopen(OutputFileName,"w"); if (fout==NULL) { printf("can't open file <%s>\n",OutputFileName); exit(1); //ファイルオープンエラーで緊急停止 } while (line_no < m) { fgets(textbuffer,512,fin); //ファイル読み込みエラーでない限り //fgets(textbuffer,512,fin)とはファイルfinから一行読み込み, //文字配列textbufferに保存しなさいの意味。 //ただし,文字列長制限があり511文字まで fprintf(fout,"%04d %s",line_no,textbuffer); fprintf(stdout ,"%04d %s",line_no, textbuffer ); line_no++; } m=0; fclose(fin); fclose(fout); return 0; } void copy(FILE *src, FILE *dst); // srcが指す文字列をdstが指す配列にコピーする。 int max = 11; int main(int argc,char* argv[]) { char *max,*max1; int m; FILE *fp; if(argc<2) { copy(stdin, stdout); // コマンドライン引数が1のとき } else if(argc<3) { // コマンドライン引数が2のとき fp =fopen(argv[1], "r"); copy(fp, stdout); fclose(fp); } else if(argc<4) { // コマンドライン引数が3(C:\Users\username\chap09\kadai>conhead abc.c -n5)のとき m=strlen(argv[2]); if(m==3){ max=&argv[2][2]; m=*max-'0'; printf("mは「%d」です\n",m); ++m; } if(m==4){ max =&argv[2][2]; max1=&argv[2][3]; m=*max-'0'; m =m*10 + *max1-'0'; printf("mは「%d」です\n",m); ++m; } put_data(m); } return 0; } void copy(FILE *src, FILE *dst) // srcが指す文字列をdstが指す配列にコピーする。 { int ch; int i; int max; while ((ch = fgetc(src)) != EOF) { fputc(ch, dst); if(ch == '\n') //改行をカウント i++; if(i == max) break; } } /* 実行時のコンソール画面 C:\MinGW\users\chap09\kadai>gcc -I. -o kad9-5 kad9-5.c pdcurses.a C:\MinGW\users\chap09\kadai> kad9-5 a.c -n8 mは「8」です 読み込みファイル名 : a.c 書き出しファイル名 : b.txt 0001 /*プログラムソースファイルを行ごとに読み込んで,行頭に行番号 をつけて,テキストファイルに書き出す。 0002 0003 あらかじめチェック用プログラムソースファイル「a.c」をテキス トエディタでつくってから実行し, 0004 「b.txt」が出来たことを確認して,テキストエディタで「b.txt」 を見るとよい。 0005 0006 関数fgets()は,ファイルから一行を読み込み文字列にする。 0007 一行とは,改行文字があるところまでの文字列。 0008 C:\MinGW\users\chap09\kadai>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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