2016-05-29 5 views
-1

このメソッドを使用して、文字列内の空白または指定された単語を検索しています。 ただし、この方法は機能しません。私は何度も流れをチェックしました。簡単な方法でも文字列と指定されたcharに空白が見つかりません

#include <stdio.h> 
int main() 
{ 
    char text[50], find; 
    int i = 0, sp = 0; 
    printf("Enter text: \n"); 
    scanf("%s", text); 
    printf("Enter a char to find:\n"); 
    scanf("%c", &find); 
    while (text[i] != '\0') // to receive a value untill enter is pressed. 
    { 
     if (text[i] == find) // count if text[i] is the specified value. 
      { sp++; } 
     i++; 
    } 
    printf("%d", sp); // prints 0 always. how to fix this. 
} 
+0

文字が存在する場合、出力は文字の出現回数でなければなりませんか? – Cherubim

+0

はい、これが私が望むものです。@ CherubimAnand – Precious

答えて

0

の標準的な定義を使用しますまたは文字列をスキャンする最後に入力する改行文字text。空白を入れてくださいfindscanf声明:

scanf(" %c",&find)

なぜスペースを与えるには?それは空白すなわちに遭遇したときscanf("%s",string)は、'\n'または'\0'または'\t'が、スペースを考慮するためにスキャンを終了します。スペースを与えることによって

は、コンパイラは以前scanfから'\n'文字

を省略します、試して これを使用してscanf("%[^\n]s",string")

+0

ありがとう、働いた。それについてもっと教えていただけますか?申し訳ありませんが私は学生です。私はなぜfindが常に\ nで割り当てられているのか分かりません。 – Precious

+0

@precious上記の注意を参照してください。scanfは空白や改行があったときに読み込みを中断しますので、次のscanfに格納されて保存されます。なぜなら、findには常にスペース – Cherubim

0

scanf()を使用して、文字列をスペースで読み取ることはできません。スペースに遭遇するとすぐにscanf()が終了します。

代わりにfgets()を使用してください。


文字列内の単語を見つけるために、文字列を比較するにはstrcmp()を使用します。

SIDE注:

1)scanf()

2の戻り値を確認してください)あなたのコード内findは常に\nが割り当てられているmain()

int main(void) //if no command line arguments. 
+0

はい、私は 'fget()'を使うことができますが、この関数が動作し、このカスタム関数の使用法の基礎を学ぶことは有益です。 – Precious

+0

@Preciousスペースがあるところで文字列を読み取るのに 'scanf()'を使うことはできません。私はあなたのコメントを正しく理解していませんでした。 – Haris

0

それ:

scanf("%[^\n]", fullName); 

がうまくいきます。全行を受け取る

関連する問題