2013-03-02 48 views
1

我的功能还没有完全完成,但我现在要做的是长整数的上一行的变量个数读取:和strchr使用和strtol将

  • 要分开的一串数字阅读由空格。
  • 从该字符串中提取数字。
  • 将它们转换为长整数。
  • 返回读取号码的数量。

    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使用错误。

回答

1

strtol()回报:

成功时,该函数返回经转换的整数作为长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 

Link to codepad

+0

@DanielFischer OK理解谢谢:) – 2013-03-02 19:19:28

+0

感谢您的答复。哦,这就是strtol函数的工作原理,我完全误解了它。我认为第二个论点是应该停止作为输入的地方,而不是作为输出实际停止的地方。这非常完美,非常感谢你! – Frey1337 2013-03-02 19:32:41

+0

@ Frey1337第二个参数是从strtol()返回的,这就是第二个参数中的原因'end'出现为&end'作为第一个参数被输入,所以只有'end'就足够了! ..让我知道你是否有其他困惑。 – 2013-03-02 19:36:33