[解決済み] C言語でtxtファイルのデータをスキャンして配列に格納する方法は?
2022-02-07 07:46:26
質問内容
文字列と数値の両方を含むテキストファイルを読み込んで、それぞれの配列に保存しようとしています。読み込もうとしたテキストファイルの内容は次のとおりです。
Ryan, Elizabeth 62
McIntyre, Osborne 84
DuMond, Kristin 18
Larson, Lois 42
Thorpe, Trinity 15
Ruiz, Pedro 35
Ali, Mohammed 60
Vashti, Indura 20
リペアマンの姓、名、年齢を並列配列で保存する必要があります。(だから、読み込むときにカンマを捨てる必要がある)。 これは、私がこれまでに持っているものです。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char line[100][41];
char junk[100];
int i;
FILE *file = fopen(argv[1], "r");
if(!file) {
printf("Could not open file. Exiting application.");
return 1;
}
for(i=0; i<100; i++)
{
fscanf(file, "%[^\n]", line[i]); //Get text
fscanf(file,"%[ \n\t\r]s",junk); //Remove any 'white space' characters
}
fclose(file);
for (i=0; i<30; i++)
printf("%s\n",line[i]);
return 0;
}
IDEでfileの引数を渡しました。出力の末尾に特殊文字がたくさん出てくるのですが。
Ryan, Elizabeth 62
McIntyre, Osborne 84
DuMond, Kristin 18
Larson, Lois 42
Thorpe, Trinity 15
Ruiz, Pedro 35
Ali, Mohammed 60
Vashti, Indura 20
┌
t╠╠
$
M
v
9 Rì
xá
╚
±
t/╗₧8
¿≡`
Tq töq t4≤`
ÿv
h(((( Hääääääääääüüüüüüéééééé
なぜこんなに特殊な文字ばかり読んでいるのだろう?また、カンマを破棄して3つの配列に保存するにはどうしたらよいのでしょうか?
どのように解決するのですか?
何人分のファイルであっても、30人分が出力されるようになっています。あなたの場合、そのファイルには8人しか含まれていませんので、残りの22行で保持されている値(
line[8]
から
line[29]
) は初期化されないので、ゴミ値です。その結果、おかしな文字が出力されます。
以下は、改良したコードです。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char first[100][40], last[100][40];
int age[100];
size_t i = 0;
FILE *file = fopen(argv[1], "r");
if(!file) {
printf("Could not open file. Exiting application.");
return 1;
}
while(fscanf(file, " %[^,],%s%d", first[i], last[i], &age[i]) == 3)
{
i++;
}
size_t num = i;
fclose(file);
for (i = 0; i < num; i++)
printf("%s, %s\t%d\n", first[i], last[i], age[i]);
return 0;
}
実は、最初に一行まるごと読み込む必要はない。その代わり、期待されるデータをファイルから直接スキャンしてください。
関連
-
[解決済み】strcmpが機能しない
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] JavaScriptで配列を比較する方法は?
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】strcmpが機能しない
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] struct has no member named
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言