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

inserting returned int from atoi() into array

我有一个来自 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++]);
   } 

}

numberint 类型,数组也被初始化为 int 数组。

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

任何帮助都很棒

编辑:LMAX = 1024

It's only when I put array[count++] in the printf statement that it gives me 0's in the output

这是因为count++有副作用。当您分配 array[count++] 然后打印 array[count++] 时,您打印的不是相同的值,因为第二次围绕索引递增。

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

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

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

printf 语句使用的值 'count' 已经递增到数组中放置该值的位置。

下面这两行更糟,因为

1) 计数递增到超过放置值的位置 2) count在printf语句

中再次递增
array[count++] = number;
printf("%d",array[count++]);

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

应该检查 fopen 的返回值是否为 != NULL 以确保操作成功,如果不成功,则调用 perror() 然后调用 exit()

这个循环:

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,";,"));
   } 
}

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