-2

2 ワードを取り、その長さをカウントする関数を作成する必要があります。以下に書きましたが、このコードは最初の単語に対してのみ動作します。文全体をカウントするように改善するにはどうすればよいですか?

#include <stdio.h>
int findlen(int *s);

int main(void)
{

  char string1[80];
  printf("Enter a string: ");
  scanf("%s", string1);

  printf("Lenght of %s is %d\n", string1, findlen(string1));

}

//find the length of the inputted string
int findlen(char *s)
{

  int count = 0;
  while (*s != '\0')
  {
    s++;
    count++;
  }

  return count;
}
4

3 に答える 3

6

scanf1つの単語の入力のみを受け取ります..(つまり、スペースが現れると壊れます..

fgetsまで完全な文字列を読み取ってみてください。\n

于 2013-08-01T11:10:13.283 に答える
0

[%^\n] フォーマット指定子を使用して、'\n' が検出されるまで文字列をスキャンするようにします。これにより、スペースを含む文字列 (例: "hello word") をスキャンする際の問題が解決されます。

scanf("[%^\n]",straddr);
于 2015-11-05T19:39:42.617 に答える
0

fgetsファイルから行を安全に取得するために使用できます。

ここから

char *fgets(char *s, int size, FILE *stream);

scanf 行を次のように置き換えます。

fgets(string1, sizeof(string1), stdin);

代わりに使用getsすると、バッファーの大きさがわからず、大きすぎる行を読み取るとクラッシュします。

次に、文字列の長さを知りたい場合は、次のstrlen関数を使用できstring.hます。

#include<string.h>
...
printf("Lenght of %s is %d\n", string1, strlen(string1));
于 2013-08-01T11:15:15.913 に答える