###前提・実現したいこと
C言語でテキストファイルを読み、入力された行数のテキストを表示しようとしています。
例えば以下の「Hello.dat」というテキストファイルを読み、以下のように2行目と指定して実行すると、テキストファイルの2行目が表示されることを実現したいです。
txt
1//Hello.dat 2Hello world 3Hello C 4Hello world 5Hello C 6Hello world 7Hello C 8Hello world 9Hello C 10Hello world
./example Hello.dat 2 Hello C
###該当のソースコード
現状では、以下のコードを実行すると、テキストファイルの中身が全て表示されるコードは実装できています。これをどのように変更していけばいいかわからず、困っています。
C
1#include <stdio.h> 2int main(){ 3 FILE* fp; // file pointer 4 char tmpline[256]; // temporary space 5 fp = fopen("Hello.dat", "r"); // open a file 6 if (fp != NULL) { 7 while (fgets(tmpline, 256, fp)){ 8 if (tmpline != NULL){ 9 printf("%s", tmpline); 10 } 11 } } 12 fclose(fp); 13 return 0; }
% ./example r ファイルのデータが全て表示される
###試したこと
以下のようなfor文を用いたコードを実行したところ、エラーが出てしまいました。
c
1//trial.c 2#include <stdio.h> 3int main(){ 4 FILE* fp; // file pointer 5 6 char tmpline[256]; // temporary space 7 8 fp = fopen("Hello.dat", "r"); // open a file 9 10 if (fp != NULL) { 11 for(int i = 0; fgets(tmpline, 256, fp); ++i){ 12 printf("%d : %s", i, tmpline); 13 } 14 } 15 16 fclose(fp); 17 return 0; }
% gcc -Wall trial.c -o trial trial.c: In function 'main': trial.c:7:5: error: 'for' loop initial declarations are only allowed in C99 mode for(int i = 0; fgets(tmpline, 256, fp); ++i){ ^ trial.c:7:5: note: use option -std=c99 or -std=gnu99 to compile your code
###補足情報(言語/FW/ツール等のバージョンなど)
GNU Emacs 22.1.1
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/12/30 00:41
退会済みユーザー
2017/12/30 00:43
2017/12/30 00:52 編集
退会済みユーザー
2017/12/30 00:54