在C问题中将字符串转换为float?

时间:2016-03-20 01:52:11

标签: c

所以我有一个C程序,你输入一个名称,年龄和高度作为命令行提示,这些参数写入文本文件,然而,高度(浮动),有一个问题。它写下了一个非常高的值,而不是你输入的内容。我觉得内存或类似内容存在问题。

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

int main(int argc, char *argv[]) {
    if (argc != 4) {
        printf("Please enter four parameters");
        return;
    } else {
        char name[20];
        strcpy(name, argv[1]);
        int age = atoi(argv[2]);
        double height = atof(argv[3]);
        FILE *fp;

        fp = fopen("name.txt", "w+");
        fprintf(fp, "%s\n%d\n%.2f", name, age, height);
        fclose(fp);

        printf("File written!");

        return 0;
    }
}

那么我对float height做错了什么?

1 个答案:

答案 0 :(得分:2)

在使用stdlib.hatoi()之前,您必须包含正确的标题(atof())或声明函数。

另请注意

  • 使用return;(不带返回值的return语句)在非void函数中不是很好。
  • 您应该检查fopen()是否成功。

试试这个:

#include <stdio.h>
#include <stdlib.h> /* add this */
#include <string.h>

int main(int argc, char *argv[]) {
    if(argc != 4) {
        printf("Please enter four parameters");
        return 1; /* add a return value */
    }
    else {
        char name[20];
        strcpy(name, argv[1]);
        int age = atoi(argv[2]);
        double height = atof(argv[3]);
        FILE *fp;

        fp = fopen("name.txt", "w+");
        if(fp == NULL) { /* add error check */
            perror("fopen");
            return 1;
        }
        fprintf(fp, "%s\n%d\n%.2f", name, age, height);
        fclose(fp);

        printf("File written!");

        return 0;
    }
}