C言語 ファイル入出力 文字カウント
C言語の勉強をしています。
ファイル入出力+文字カウントがわからなく質問させてもらいました。
問題の内容は文字EADBACABEEAACが入っているファイルmon1.txtを読み込み
何回文字が登場するのかをカウントするというものです。
カウント結果はコマンドプロンプトとmon1.txtに出力します。
自分でかけるところまで書いてみたのですが※の部分がどうやれば良いのかわからず質問させていただきました。
ご教授よろしくお願いします。
#include <stdio.h>
#include <ctype.h>
int main() {
FILE *fp;
char ch;
int i;
int a;
int b;
int c;
int d;
int e;
fp = fopen("mon1.txt", "w");
if(fp == NULL) {
printf("出力ファイルオープンエラー\n");
return -1;
}
for(i = 0; ※ == '\0'; i++) {
switch (※) {
case 'A':
a++;
break;
case 'B':
b++;
break;
case 'C':
c++;
break;
case 'D':
d++;
break;
case 'E':
e++;
break;
default:
break;
printf("A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",a,b,c,d,e);
fprintf(fp, "A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",a,b,c,d,e);
}
}
return 0;
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
一部間違えてました。
sprintf(writeBuf, "A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",count[0],count[1],count[2],count[3],count[4]);
でした。
No.2
- 回答日時:
ソースの一部なら良いのですが、全てのソースだったとしたら、
このソースには問題があります。
ファイルの読み書きで開いていない。
"w"ではなくて"rw"とするべきでしょう。
その後にfseek等で位置を戻したり文字数が読み込みより少ないなら
後ろのデータを消したりしないといけないので、
"r"で開いた後に改めて"w"したほうが楽と思います。
forの使い方とswitchの使い方がまだ理解できてないようなので
再度確認してください。
以前の回答者が説明しているので割愛します。
以下サンプルです。
エラーチェックは適当です。
int main()
{
FILE *fp;
char buf[50];
char writeBuf[100];
char *pBufPtr;
char count[5];
memset(buf, 0x00, sizeof(buf));
memset(writeBuf, 0x00, sizeof(writeBuf));
memset(count, 0x00, sizefo(count));
if ((fp = fopen("mon1.txt", "r")) == NULL)
{
return -1;
}
fgets(buf, sizeof(buf), fp);
fclose(fp);
pBufPtr = buf;
while (*pBufPtr != NULL)
{
switch(*pBufPtr)
{
case 'a': count[0]++; break;
case 'b': count[1]++; break;
case 'c': count[2]++; break;
case 'd': count[3]++; break;
case 'e': count[4]++; break;
default: break;
}
pBufPtr++;
}
if ((fp = fopen("mon1.txt", "w")) == NULL)
{
return -1;
}
sprintf(writeBuf, "A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",a,b,c,d,e);
printf(writeBuf);
fprintf(fp, writeBuf);
fclose(fp);
return 0;
}
No.1
- 回答日時:
> ※の部分
まず、日本語(あるいは、あなたの得意な自然言語)で、「※の部分」に何を書きたいか説明できますか?
で、それを書けたとしても、正しく動作しないと思われます。
> for(i = 0; ※ == '\0'; i++) {
for(式1;式2;式3) は
「式2が真の間ループする」
です。 ※ == '\0' だと、 「※が'\0'の間はループし、'\0'でなくなったらループを終了する」です。
「文字列が続いている間ループする」のなら、ループしたいのは '\0'で無いときで、 '\0'になったら終了ですよね?
> printf("A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",a,b,c,d,e);
> fprintf(fp, "A[%d]回、B[%d]回、C[%d]回、D[%d]回、E[%d]回",a,b,c,d,e);
この2つは、絶対に実行されません。
その理由はわかりますか?
{} の対応をよくかんがえましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーがわかりません、、
-
ファイルへの書込み処理が異常...
-
c言語 ファイルから数字を読み...
-
ファイルに行番号を追加
-
c言語でのfscanfについて
-
ガンマ変換 C言語でプログラ...
-
ファイルの特定行の抽出
-
ファイル読み込み EOF 判定
-
Cで文字列の分割
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報