-1

コマンドライン引数を受け取り、それらに対して基本的な算術演算を実行するプログラムを作成しています。私はgetopt引数を取得するために使用しており、それらを文字列として保存しています。以下は、引数を格納する変数です

char *distance = NULL;
char *time = NULL;
char *pace = NULL;

しかし、どうすればそれらを小数に変換できますか? たとえば、「5」は 5.00 になり、「6.12」は 6.12 になります。検索を試みましたが、他の解決策がうまくいかないようです。

私はやってみました

double testnum;
testnum = atof(time);

しかし、私は得る

エラー: 構造体または共用体ではないメンバー 'testnum' の要求

4

5 に答える 5

3

strtof() を試すこともできます

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

int main(void)
    {
        char *string, *stopstring;
        double x;
        float f;
        long double ld;

        string = "3.1415926This stopped it";
        f = strtof(string, &stopstring);
        printf("string = %s\n", string);
        printf("strtof = %f\n", f);
        printf("Stopped scan at \"%s\"\n\n", stopstring);
    }
于 2013-10-17T13:01:08.830 に答える
2

使用するだけatofです:

double atof (const char* str);

C 文字列 str を解析し、その内容を浮動小数点数として解釈し、その値を double として返します。

ただし、特に堅牢ではありません。特に、入力が変換できない場合はゼロを返し、入力数が大きすぎる場合は未定義の動作を返します。

于 2013-10-17T12:41:24.413 に答える
0

あなたが提供するサンプルコードは、あなたが持っているエラーと一致しません. このエラーは、 が構造体にtestnum見つからないことを示しています。

構造体へのポインターがあり、非ポインターを使用してメンバーにアクセスしていると思います。または、非ポインター構造があり、ポインターを使用してメンバーにアクセスすること。.->

于 2013-10-17T12:57:37.623 に答える
0

適切なタイプの scanf から始めることができます。

scanf("%f", &time);

printf必要に応じて型を文字列に変換するために使用します。

文字列から型を変換する必要がある場合atoXは、変換を行うためのスタイル関数を探してください。たとえば、a(ascii) をi(integer)に変換するプログラムは次のとおりです。

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

int main()
{
   int val;
   char str[20];

   strcpy(str, "98993489");
   val = atoi(str);
   printf("String value = %s, Int value = %d\n", str, val);

   strcpy(str, "tutorialspoint.com");
   val = atoi(str);
   printf("String value = %s, Int value = %d\n", str, val);

   return(0);
}enter code here
于 2013-10-17T12:42:25.603 に答える
0

atof関数を見てみましょう。char * を取り、double を解析しようとします。

于 2013-10-17T12:41:05.967 に答える