2017-05-12 5 views
-1

を反復されていません。Cループは、私は、文字列を反復処理するには、以下の方法を使用しています適切に紐を通して

char is_words(char *word) 
{ 
    if (word != NULL) { 
    for (int i = 0; i<strlen(word)-1; i++) { 
     char c = word[i]; 
     printf("c is: %c\n", c); 
     if (!isalpha(c) || !isspace(c)) { 
     return c; 
     } 
    } 
    } 
    return 'a'; 
} 

それを使用する場合しかし、それだけで、Xが最初で、「cがXである」出力します文字列の文字。なぜ文字列全体を反復処理しないのですか?それはCこの行の

if (!isalpha(c) || !isspace(c)) { 
     return c; 
} 

機能が


値を戻した後、実行を終了返し

+0

「継続」とのリターンを交換すると、[MCVE]を提供してください。例えば文字列が最初の 'return'を実行させるような" 123 "のようなものではないことをどうやって知りますか? – kaylum

+2

おそらく、 'if'文の中で' || 'を' && 'に置き換える必要があります。 – AntonH

+0

'return'は関数の実行を終了し、呼び出し元関数に制御を返します。 – CinCout

答えて

0

コードのこの部分に置き換え:あなたは以下の条件の両方に該当する場合に返すようにしたいと

if (!isalpha(c) && !isspace(c)) { 
    return c; 
} 

if (!isalpha(c) || !isspace(c)) { 
    return c; 
} 

とを

  • cは英字ではありません
  • cあなたの条件は今の文字を返します(その結果、機能を終了)

スペースではありませんいずれかそれがスペースでない場合、それはまたはアルファベットでない場合。だから、文字列を与えることで、関数はそれらを空白でないとみなし、最初の文字に戻ります。

for (int i = 0; i<strlen(word)-1; i++) 

と::

for (int i = 0; i < strlen(word); i++) 

strlen(word)-1までの文字を調べることなどによって、あなたは最後の文字を検討しません

2.はまた、ループ条件を交換してください。

1

は& &とを使用する方法を学習||

いくつかの説明

cはABCのシンボルである場合 - isalpha(c) = true , isspace(c) = false

true || false = true 

cは、スペース記号

isalpha(c) = false , isspace(c) = true 

false || true = true 

ある場合cが数字である場合、Lは偽と印刷1よりSYMBを得る

-2

[OK]を、何をやりたいか、 1.あなたは、印刷文字だけをしたい場合は、

+0

オペレータは、アルファベットまたはスペースではない文字を満たしていれば、戻りたいと思っています。彼が 'return'を' continue'に置き換えると、これは起こりません。 – Marievi

関連する問題