将 char 数组从读取文件转换为 double

标签 c arrays char double

所以我正在读取一个由空格分隔的数字文件,我试图将这些数字存储到一个整数数组中。不过我做错了什么,因为我一直在数组中得到零。

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++;
    }
}

最佳答案

您需要nul 终止数组以使其成为 中的字符串.

while ((temps[u] = fgetc(param)) != EOF)
        u++;
temps[u] = '\0';

不这样做并将 temps 传递给 strtok() 会调用未定义的行为,因为它是未定义的,所以无法解释程序的行为。

你还应该:

  1. 在尝试访问 argv 之前检查 argc 的值。
  2. 检查fopen()的返回值。
  3. 此外,fgetc() 返回 int 而不是 char,因此 EOF 会导致问题你的代码,除此之外你不希望 EOF 无论如何都在数组中。
  4. 为清楚起见,避免将声明与代码混在一起。

这是你自己修复的程序,它应该可以正常工作,前提是

  1. 输入文件退出并可读。
  2. 输入文件包含适当的数据。

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++;
    }
}

关于将 char 数组从读取文件转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005287/

相关文章:

c - C 中的循环不能正确递增

python - 严格递增子序列的最小数量

c++ - 带字符串或字符的动态分配(数组)

TDD session 期间出现 java.lang.AssertionError

c++ - 使用可变参数的宏

c - 尝试将 openldap 移植到 Windows 时出现错误 LNK2019 无法解释

c - 如何用C多次写入一个文件?

javascript - 在 JavaScript 数组中更新现有变量

java - 多选项字符串颜色输入验证?

c++ - Visual Studio 多字节字符到单字节