ページ 11

指定した文字のカウント

Posted: 2015年12月23日(水) 12:11
by REN
文字列を入力してそのあとに文字を1つ指定しその文字列の中に入力した文字がいくつ含まれているのかを数えるプログラム
なのですが、最初のstrを入力した時点でいきなりaの部分に強制的にstrの文字が入力されてしまいカウントされません。

例えば、strにabcと入力すると強制的にaにもabcが入力され
結果が
abcの中にabcが0個あります
になってしまいます。
よろしくお願いします。

コード:

#include<stdio.h>

int search(char str[], char a);

int main(void)
{
	char str[100];
	char a;
	int ans;

	printf("文字列を入力\n");
	scanf("%s", str);

	printf("指定する文字を入力\n");
	scanf("%c", &a);

	ans = search(str, a);

	printf("%sの中に%cは%d個あります\n", str, a, ans);

	return 0;
}

int search(char str[], char a)
{
	int i, c;

	c = 0;

	for (i = 0; str[i] != '\0'; i++){
		if (str[i] ==a){
		c++;
}
	}
	return c;
}

Re: 指定した文字のカウント

Posted: 2015年12月23日(水) 12:34
by みけCAT
REN さんが書きました:例えば、strにabcと入力すると強制的にaにもabcが入力され
結果が
abcの中にabcが0個あります
になってしまいます。
このコードがC言語またはC++と仮定すると、aはchar型なので一文字しか入りません。
したがって、aにabcが入力され、「abcの中にabcが0個あります」と出力されることはありえません。
また、あってはいけない場所に全角の&があるので、そもそもコンパイルが通りません。

使用している言語を教えてください。

Re: 指定した文字のカウント

Posted: 2015年12月23日(水) 13:25
by かずま
REN さんが書きました:文字列を入力してそのあとに文字を1つ指定しその文字列の中に入力した文字がいくつ含まれているのかを数えるプログラム
なのですが、最初のstrを入力した時点でいきなりaの部分に強制的にstrの文字が入力されてしまいカウントされません。
最初の scanf であなたは "abc\n" を入力しました。Enter キーを押しましたよね。
その scanf は "abc" を読み込みます。標準入力には "\n" が残っています。
次の scanf はその "\n" を読み込みます。"abc" の中に '\n' は 0個です。

修正方法は %c の前にスペースを入れること。

コード:

	scanf(" %c", &a);
宿題です。そのスペースの意味を調べて、ここに書いてください。