将从 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++]);
}
}
number
是 int
类型,数组也被初始化为 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,";,"));
}
}
即使这些更改仍然需要检查数组[]是否已完全添加。
我有一个来自 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", 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,";,"));
}
}
即使这些更改仍然需要检查数组[]是否已完全添加。