1

私の機能はまだ完全には完了していませんが、これから行うことは次のとおりです。

  • スペースで区切られた数字の文字列を読み取ること。
  • その文字列から数字を抽出します。
  • それらをlongintに変換します。
  • 読み込まれた数値の数を返します。

    int input( int a, int b, long int *result_array )
    {
        int ele = 0;
        char buffer[200];
        char *start, *end;
    
        scanf("%[^\n]%*c", buffer );
    
        start = buffer;
    
        while( ( end = ( strchr( start, ' ' ) ) != NULL ) )
        {
            result_array = strtol( start, &end, 10 );
            ele += 1;
            start = end + 1;
    
    
        }
    
        return ele;
    }
    

正しく動作していないようです。strchrを間違って使用していると思います。

4

1 に答える 1

1

strtol()戻り値:

成功すると、関数は変換された整数をlongint値として返します。有効な変換を実行できなかった場合は、ゼロ値(0L)が返されます。

コードを次のように書き直す必要があります。

end = buffer;
base = 10;
long int = li;
ele = 0;
while(li=strtol (end,&end, base)){
     ele += 1;
}
return ele;

strstr()次の整数を見つけるために明示的に使用する必要はありません。strtol()十分に賢く、各変換後にエンドポイントを次のintに配置します。

私は実行中のコードを書いたので、あなたの発見が役立つかもしれません:

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */
int main (){
  char buffer[] = "2001 11 223   444   566";
  char * end;
  long int li;
  end =buffer;
  int base =10;
  int ele = 0;
  while(li=strtol (end, &end, base)){
     printf("%ld \n", li);
     ele += 1;
  }
  printf("\nNo of elements: %d", ele);
  return 0;
}

その出力:

2001 
11 
223 
444 
566 

No of elements: 5

コードパッドへのリンク

于 2013-03-02T19:06:33.393 に答える