2013-03-02 46 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