我有一个来自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
答案 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,";,"));
}
}
即使这些更改仍需要检查数组[]是否已完全添加。