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";
をしようとしたとき、私は奇妙な出力ました:
をtoInt関数に何か問題があるかもしれませんが、何が間違っているのかはわかりません。多分あなたの誰かがアイデアを持っています。
私はこれをatoi関数を使って簡単にすることができますが、ここで何が問題なのか興味があります。
デバッガでコードをステップ実行したときに何が表示されましたか? – pm100
'sign'は' int sign = 0; 'のように初期化する必要があります。' int toInt(char a []); 'をプロトタイプとして使用します。 – BLUEPIXY
'a [0]!= '-''ならば、次の' sign'チェックは初期化されていない変数から読み込みます。これは未定義の動作です – KABoissonneault