将atoi()中的返回int插入到数组中

时间:2015-03-25 05:29:07

标签: c arrays atoi

我有一个来自strtok()的令牌,我希望将其转换为整数并使用atoi()放置在数组中。但是,我遇到了困难。

char string[LMAX];
int array[LMAX];
int number;
char *token = NULL;
int count = 0;
FILE *fp;
fp = fopen("test.txt","r");

while(fgets (string, LMAX, fp) != NULL) { 
   //Reading the file, line by line
   printf("%s", string);
   token = strtok(string,",");
   array[count++] = atoi(token);
   //printf("%d",array[count]);
   while(token=strtok(NULL,";,")){
   number = atoi(token);
   array[count++] = number;
   printf("%d",array[count++]);
   } 

}

number的类型为int,数组也初始化为int数组。

当我运行以下代码时,我打印出全部0,但有趣的是,当我用printf("%d", number);替换printf("%d", atoi(token));时,我得到了正确的输出。我希望能够实际存储atoi(令牌),但它不允许我这样做。

任何帮助都很棒

编辑:LMAX = 1024

2 个答案:

答案 0 :(得分:0)

  

只有当我在printf语句中添加array[count++]时,它才会在输出中给出0

这是因为count++有副作用。当您指定array[count++]然后打印array[count++]时,您不会打印相同的值,因为索引周围的第二次会增加。

此外,计数将递增两次,因此array中的每个其他值都将未初始化。

如果要打印刚刚存储在数组中的值,请使用count-1作为索引:

while(token=strtok(NULL,";,")){
    number = atoi(token);
    array[count++] = number;
    printf("%d",array[count-1]);
} 

答案 1 :(得分:0)

printf语句使用的值是' count'已经增加超过放置值的数组中的位置。

以下这对线甚至更糟,因为

1)计数增加到放置值的位置 2)计数在printf语句中再次递增

array[count++] = number;
printf("%d",array[count++]);

建议在循环结束时只增加一次计数

来自fopen的返回值应检查!= NULL以确保操作成功,如果不成功,则调用perror()然后退出()

这个循环:

while(fgets (string, LMAX, fp) != NULL) { 
   //Reading the file, line by line
   printf("%s", string);
   token = strtok(string,",");
   array[count++] = atoi(token);
   //printf("%d",array[count]);
   while(token=strtok(NULL,";,")){
   number = atoi(token);
   array[count++] = number;
   printf("%d",array[count++]);
   } 

}

有几个问题,建议:

while(fgets (string, LMAX, fp)) 
{ 
   //Reading/echoing the file, line by line
   printf("%s", string);

   token = strtok(string,",");

   while(token)
   {
       number = atoi(token);
       array[count] = number;
       printf("%d",array[count++]);
       token =strtok(NULL,";,"));
   } 
}

即使这些更改仍需要检查数组[]是否已完全添加。