• ベストアンサー

このプログラムのどこを直せばいいんでしょうか?

いま、文字列strの中に文字cが含まれている個数を表示するプログラムを作っているんですが、下のように作っても、上手く行きません。 どこをどう直せばいいのか教えてください! #include <stdio.h> int str_chnum (const char str[],int d) { int i=0; int sum=0; while(str[i]!=0){ if(str[i]==d ){ sum++; } i++; } return(sum); } int main(void) { int c; char str[128]; puts("put sentence..."); scanf("%s",str); puts("search character..."); scanf("%d",&c); printf("there are %d %ds in this sentence.",str_chnum(str,c),c); return(0); }

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

put sentence... aaaaaaaabbbcccdd<Enter> search character... 97<Enter> there are 8 97s in this sentence. って感じで、正しく動いてますが? 因みに「97」は「a」のアスキーコードです。 もしかして put sentence... aaaaaaaabbbcccdd<Enter> search character... a<Enter> there are 0 *****s in this sentence. (*****は不定、毎回違う) って入力してたりしない? scanf("%d",&c); は「数値」しか受けつけないから a<Enter> って入力しても、cには何も代入されないで、cは未初期化で不定のままですよ。

aquoas
質問者

お礼

返事が遅れて申し訳ないです。 みなさんありがとうございます。 自分はずっとscanf("%d",○×△)で数値でも文字でもなんでも読み込めると思ってました。 scanf"%c"でできました。

その他の回答 (3)

  • ko_kinta
  • ベストアンサー率39% (43/109)
回答No.3

main()のint cにはアスキーコードをscanf()するつもりですか? コードでなく、アスキー文字を入力するのなら、 char c; … scanf("%c", &c); にして、 str_chnum()の第二引数をchar型にすればいいんじゃない。 それより、デバッガーで追っていけばどこがいけないのか簡単に気が付く程度のコード数なんだけど。 今後のためにもデバッグのやり方を身に付けた方がいいですよ。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「うまくいかない」というなら, 「どういう入力をして」「どういう出力を期待して」「実際の出力はどうなったか」くらいは書くように.

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>どこをどう直せばいいのか教えてください! scanf() を使わない。

関連するQ&A