2017-05-08 119 views
0

我遇到了問題。在我的程序中,我想分割字符串,將每個子字符串保存在變量中,然後將它們轉換爲int,以便我可以進行一些計算。劃分字符串並轉換爲Int

char line[] = "500,600"; 
char line[] = "-500,-600"; 
char line[] = "500,-600"; 

但是當我嘗試

char line[] = "-500,600"; 

我得到了奇怪的輸出:

enter image description here

#include <stdio.h> 
#include<string.h> 



int main() 
{ 

char *token; 
char *token2; 
char line[] = "-500,600"; 
char *search = ","; 


printf("%s\n",line); 


token = strtok(line, search); 
printf("token1: %s\n",token); 


token2 = strtok(NULL, search); 
printf("token2: %s\n",token2); 


int n = toInt(token); 
int m = toInt(token2); 

    printf("String = %s\nInteger = %d\n", token, n); 
    printf("String = %s\nInteger = %d\n", token2, m); 

    int b = n*3; 
    int c = m*2; 

    printf("%d\n",b); 
    printf("%d",c); 



    return 0; 
} 

int toInt(char a[]) { 
    int c, sign, offset, n; 

    if (a[0] == '-') { // Handle negative integers 
    sign = -1; 
    } 

    if (sign == -1) { // Set starting position to convert 
    offset = 1; 
    } 
    else { 
    offset = 0; 
    } 

    n = 0; 

    for (c = offset; a[c] != '\0'; c++) { 
    n = n * 10 + a[c] - '0'; 
    } 

    if (sign == -1) { 
    n = -n; 
    } 

    return n; 
} 

當輸入值,例如它工作正常toInt函數可能有問題,但我不能說出了什麼問題。也許你有人有一個想法。

我知道我可以使用atoi函數更簡單,但我感興趣的是這裏有什麼問題。

+3

當您使用調試器完成代​​碼時,您看到了什麼? – pm100

+2

'sign'需要初始化爲'int sign = 0;'在使用它之前還要將原型'int toInt(char a []);'放入。 – BLUEPIXY

+2

正確的,如果'a [0]!='-'',那麼下一次檢查'sign'會從一個未初始化的變量中讀取,這是未定義的行爲 – KABoissonneault

回答

0

感謝您在評論中快速回答。初始化sign解決我的問題。