🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

3回答

1812閲覧

C言語で特定の文字が何文字あるのかカウントしたい。

kanato_gungun

総合スコア0

C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2020/12/17 13:14

編集2020/12/17 13:38

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
C言語について質問です。
キーボードから入力したファイル名のファイルに含まれている小文字のaの数を求めたいのですが上手く機能しません。カウントができていないようで、何度やっても0になってしまいます。 どなたかわからないでしょうか?

作ったソースは以下の通りです。
include <stdio.h>

int main(void)

{

int a_count=0;
char fname[100];
int i;
FILE*fp;

printf("ファイル名:");
scanf("%s",fname);

fp=fopen(fname,"r");
if(fp==NULL){
printf("指定したファイルは開けません.");
return (1);
}

for(i=0; fname[i]!='\0'; i++){
if(fname[i] == 'a'){a_count++;}
break;
}

fclose(fp);

printf("aは%d文字\n",a_count);

return 0;

}

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

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

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

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

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

guest

回答3

0

C

1for(i=0; fname[i]!='\0'; i++){ 2if(fname[i] == 'a'){a_count++;} 3break; 4}

いろいろな間違いはともかく、質問に対する答えとしてはここでaを見つけてカウントした後にfor文をbreakで抜けているからです。

投稿2020/12/18 05:02

hero1000

総合スコア56

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

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

0

カウントが出来ない以前に、変数textが宣言されていないので、コンパイルエラーです。

あと、変数countが初期化されていません。

投稿2020/12/17 13:38

otn

総合スコア85893

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

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

0

  • fgetsで読んだ内容を格納する配列textが宣言されていない。コンパイルできないよね。
  • textの添字として使うiは、内側のwhileの直前で0を代入する必要がある。
  • 内側のwhileの条件を、ヌル文字と等しくないにしておかないと、長い行を分割して読むときに困る。
  • countの初期値を設定していない。
  • fopenに失敗したときでもfgetsが実行されるため、実行時エラーを引き起こすだろう。

修正後の問題点

  • fgetsしておらず、ファイル名の文字列のaを数えている。
  • forの中でbreakしているため、実質的に文字列の先頭の文字しか調べていない。

投稿2020/12/17 13:33

編集2020/12/17 14:15
Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問