1

我的功能还没有完成,但我要做的是:

  • 读入以空格分隔的一串数字。
  • 从该字符串中提取数字。
  • 将它们转换为长整数。
  • 返回读入的数字个数。

    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()返回:

成功时,该函数将转换后的整数作为 long int 值返回。如果无法执行有效转换,则返回零值 (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 回答