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

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

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

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

Q&A

解決済

3回答

859閲覧

テキストファイルの中身を行指定して表示させたい

gyoruo

総合スコア61

C

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

0グッド

0クリップ

投稿2020/05/05 15:15

テキストファイルの中身を行指定して表示させたいのですが、上手くいきません。
問題点1. テキストファイルの中身が可変長の場合、fseek(fp, , SEEK_SET);の第2引数にはどのような考え方をすれば上手くいきそうでしょうか?
問題点2. 仮にfseek(fp, str[val - 1], SEEK_SET);とした場合、subscripted value is not an array, pointer, or vector(添え字の値は、配列、ポインタ、またはベクトルではありません。)というエラーが表示されてしまいます。main()でstr配列を作成したのに、どうしてこのようなエラーが表示されるのでしょうか?

file.text

1aa 2bbb 3cccc 4d

C

1#include <stdio.h> 2#include <stdlib.h> 3 4char fileDisplay(char str, int val) { 5 6 FILE *fp; 7 fp = fopen("file.txt", "r"); 8 if (fp == NULL) { 9 printf("ファイルが開けません"); 10 exit(EXIT_FAILURE); 11 } 12 13 fseek(fp, str[val - 1], SEEK_SET); 14 fgets(str, sizeof(str), fp); 15 fclose(fp); 16 17 return str; 18} 19 20int main(void) { 21 char str[30]; // ファイルの中身を入れる配列 22 int val; // ファイルの行数を指定 23 24 printf("ファイルの行数を入力してください\n"); 25 scanf("%d", &val); 26 printf("ファイルの%d行目を指定しました\n", value); 27 28 fileDisplay(str, val); 29 30 printf("ファイルの中身は、%sです", str); // 指定された行のファイルの中身を表示 31 return 0; 32} 33

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

main()でstr配列を作成したのに、どうしてこのようなエラーが表示されるのでしょうか?

char fileDisplay(char str, int val)の、char strは文字列(charの配列)になっていません。
・・・型が違うので、エラーに成ると思いますが・・・コンパイラは何でしょう?
また、subscripted value is not an array, pointer, or vectorのエラーは、fseek(fp, str[val - 1], SEEK_SET);の str[val - 1]の部分に対してのエラーです。

投稿2020/05/05 15:29

編集2020/05/05 15:37
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/05/05 15:44 編集

出ているエラーメッセージは、省略せずに全て貼り付けましょう。 一読をお勧めします→https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5
gyoruo

2020/05/06 15:20

エラーメッセージの記事までありがとうございます! 次回からは気をつけたいと思います。
guest

0

ベストアンサー

問題点1. テキストファイルの中身が可変長の場合、fseek(fp, , SEEK_SET);の第2引数にはどのような考え方をすれば上手くいきそうでしょうか?

行の長さが決まっていない場合は、fseekは使いようが無いです。
先頭から、'\n'の個数を数えながら読んでいきます。

問題点2. 仮にfseek(fp, str[val - 1], SEEK_SET);とした場合、subscripted value is not an array, pointer, or vector(添え字の値は、配列、ポインタ、またはベクトルではありません。)というエラーが表示されてしまいます。main()でstr配列を作成したのに、どうしてこのようなエラーが表示されるのでしょうか?

関数の引数宣言で、strchar型と宣言されています。mainstrは関係ありません。

投稿2020/05/05 15:24

otn

総合スコア84559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gyoruo

2020/05/06 15:21

丁寧なご回答、ありがとうございます! いろいろと試してみます!
guest

0

1行読み出しの関数を使って目的行まで読み捨てましょう
その読み捨て時に、主要行(50行おきとか)のファイル位置を記録してればいいです

投稿2020/05/05 15:22

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gyoruo

2020/05/06 15:19

考え方をありがとうございます! やってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問