2017-05-08 12 views
0

問題が発生しました。私のプログラムでは、文字列を分割し、各部分文字列を変数に保存し、次にそれらをintに変換して、いくつかの計算を行うことができます。文字列を分割してIntに変換する

#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; 
} 

入力値は、例えば、あるとき、それは正常に動作します:

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

しかし、私は

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

をしようとしたとき、私は奇妙な出力ました:

enter image description here

をtoInt関数に何か問題があるかもしれませんが、何が間違っているのかはわかりません。多分あなたの誰かがアイデアを持っています。

私はこれをatoi関数を使って簡単にすることができますが、ここで何が問題なのか興味があります。

+3

デバッガでコードをステップ実行したときに何が表示されましたか? – pm100

+2

'sign'は' int sign = 0; 'のように初期化する必要があります。' int toInt(char a []); 'をプロトタイプとして使用します。 – BLUEPIXY

+2

'a [0]!= '-''ならば、次の' sign'チェックは初期化されていない変数から読み込みます。これは未定義の動作です – KABoissonneault

答えて

0

コメントのお返事ありがとうございます。私の問題を解決するsignを初期化する。

関連する問題