- ベストアンサー
このプログラムのどこを直せばいいんでしょうか?
いま、文字列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); }
- みんなの回答 (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は未初期化で不定のままですよ。
その他の回答 (3)
- ko_kinta
- ベストアンサー率39% (43/109)
main()のint cにはアスキーコードをscanf()するつもりですか? コードでなく、アスキー文字を入力するのなら、 char c; … scanf("%c", &c); にして、 str_chnum()の第二引数をchar型にすればいいんじゃない。 それより、デバッガーで追っていけばどこがいけないのか簡単に気が付く程度のコード数なんだけど。 今後のためにもデバッグのやり方を身に付けた方がいいですよ。
- Tacosan
- ベストアンサー率23% (3656/15482)
「うまくいかない」というなら, 「どういう入力をして」「どういう出力を期待して」「実際の出力はどうなったか」くらいは書くように.
- koko_u_
- ベストアンサー率18% (459/2509)
>どこをどう直せばいいのか教えてください! scanf() を使わない。
お礼
返事が遅れて申し訳ないです。 みなさんありがとうございます。 自分はずっとscanf("%d",○×△)で数値でも文字でもなんでも読み込めると思ってました。 scanf"%c"でできました。