首页 > 解决方案 > 我正在使用此代码从文本文件中打印,但程序给了我“-1.#IND00”

问题描述

我有个问题。我正在使用此代码从文本文件中打印,但程序11732408.000000每次都会给我一个不同的数字 - 例如 - 。ex但是当是整数时我没有遇到这个问题。

#include <stdio.h>
#include <string.h>

int main() {
    char example[] ="123.12/456 ";
    double ex = atof(strtok(example, "/"));
    printf("%lf", ex);
    return 0;
}

标签: c

解决方案


您忘记<stdlib.h>包含包含atof().

尽管缺少声明,您的编译器还是会接受您的代码,并且它会错误地将原型推断为int atof(char *),这会在将返回值存储到 时导致未定义的行为ex

因此,虚假输出。

另请注意,l格式中的%lf是必需的,scanf()但被忽略,printf()因为参数在传递给可变参数函数时float会隐式转换为。double

这是一个更正的版本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char example[] = "123.12/456 ";
    char *p = strtok(example, "/");
    if (p != NULL) {
       double ex = atof(p);
       printf("%f\n", ex);
    }
    return 0;
}

推荐阅读