c - 分割字符串并转换为 Int

标签 c string 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 函数使事情变得更简单,但我感兴趣的是这里出了什么问题。

最佳答案

感谢评论中的快速答复。初始化sign解决了我的问题。

关于c - 分割字符串并转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851186/

相关文章:

java - 如何在 Java 中以 unsign 格式打印字节

objective-c - SInt32 和 << 的问题

C:用字符串数组初始化结构

c - 使用 `PostQuitMessage` 和只处理所有消息有区别吗?

c - 执行家族

java - 对于以下用例,什么可以更快地实现 trie?

C - 当尝试更新记录时,fseek() 会影响文件的内容(结构)

java - 需要帮助将字符串转换为数字类型(20,3)

php - 使用 PHP substr,如何找到前面的空格而不是后面的空格?

ios - Swift 中的 Int 与 Integer