所以我正在读一个用空格分隔的数字文件,我试图将这些数字存储到一个整数数组中。我做错了,因为我只是在数组中得到零。
int main(int argc, char *argv[]){
FILE *param;
char temps[500];
double holder[500];
param = fopen(argv[1],"r");
int u = 0;
while ((temps[u] = fgetc(param)) != EOF)
u++;
char *pch;
int v = 0;
pch = strtok(temps," ");
while (pch != NULL) {
holder[v] = atof(pch);
pch = strtok(NULL," ");
v++;
}
}
答案 0 :(得分:1)
您需要nul
终止数组,使其成为c中的字符串。
while ((temps[u] = fgetc(param)) != EOF)
u++;
temps[u] = '\0';
没有这样做并且将temps
传递给strtok()
会调用未定义的行为,并且由于它未定义,因此无法解释程序的行为。
您还应该:
argc
之前检查argv
的值。fopen()
。fgetc()
会返回int
而非char
,因此EOF
会导致您的代码出现问题,除此之外您还不会#39; t EOF
无论如何都要在数组中。这是你自己的程序修复,它应该正常工作
int main(int argc, char **argv)
{
FILE *param;
char temps[500];
double holder[500];
int u;
char *pch;
int ch;
int v;
if (argc < 2)
{
fprintf(stderr, "Invalid number of arguments, a file path is expected.\n");
return -1;
}
param = fopen(argv[1],"r");
if (param == NULL)
{
fprintf(stderr, "error trying to open `%s'\n", argv[1]);
return -1;
}
u = 0;
while ((ch = fgetc(param)) != EOF)
temps[u++] = ch;
temps[u] = '\0';
v = 0;
pch = strtok(temps, " ");
while (pch != NULL)
{
char *endptr;
holder[v] = strtol(pch, &endptr, 0);
if (*endptr != 0)
fprintf("warning: these characters were not convetible -- %s\n", endptr);
pch = strtok(NULL, " ");
v++;
}
}
答案 1 :(得分:1)
您还可以使用fscanf在单个循环中读取double值。不知道正确的分离应该在这里,所以使用空间。
while ((ch = fscanf(param,"%lf ", &holder[v] )) != EOF)
v++;