2017-05-08 2 views
0

문제가 있습니다. 내 프로그램에서 문자열을 나누고 변수의 각 하위 문자열을 저장 한 다음 정수로 변환하여 계산을 할 수 있습니다.문자열을 분리하고 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 초기화 중입니다.