Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中设置运行时printf中十进制数字的计数_C_Printf_Integral - Fatal编程技术网

在C语言中设置运行时printf中十进制数字的计数

在C语言中设置运行时printf中十进制数字的计数,c,printf,integral,C,Printf,Integral,我有一个数字:m,由用户作为参数给出。 例如: m = 5 或 我在运行时不知道这一点。 然后我计算一个积分并将其保存到一个变量:answer 我想用m小数位数打印answer。 我该怎么做? 我试过这个: printf("answer = %(%.mf)d ", answer , m); 我知道这是错误的,但我如何解决它呢?如果你有一个带值的变量,就说: double val = 3.234003467; 您可以打印到小数点后第二位,例如使用: printf(

我有一个数字:
m
,由用户作为参数给出。
例如:

m = 5 

我在运行时不知道这一点。
然后我计算一个积分并将其保存到一个变量:
answer

我想用
m
小数位数打印
answer

我该怎么做? 我试过这个:

printf("answer = %(%.mf)d ", answer , m);

我知道这是错误的,但我如何解决它呢?

如果你有一个带值的变量,就说:

 double val = 3.234003467;  
您可以打印到小数点后第二位,例如使用:

printf("This is the value: %0.2f\n", val);
它将输出:
3.23

列出几个有用的格式说明符,以及如何/何时使用它们

下面是使用命令行输入创建格式字符串并打印浮点的完整示例,其中包含用户确定的宽度说明符:

给定以下命令行输入:
prog.exe 1.123423452345 4

使用以下代码:

#define TRUE 1
#define FALSE 0
#define bool BOOL

    bool parseDbl(const char *str, double *val);
    bool parseLong(const char *str, long *val);

    int main(int argc, char *argv[])//Use this signature rather than 
    {                               //int main(void) to allow user input
        if(argc != 3) //simple verification that command line contains 2 arguments
        {
            ;   
        }
        double dVal;
        long iVal;
        char format_string[80];
        
        if(parseDbl(argv[1], &dVal));//to simplify code, move the conversions to functions
        if(parseLong(argv[2], &iVal));
        
        //create the format string using inputs from user
        sprintf(format_string, "%s %s%d%s", "User input to \%d decimal Places:  ", "%0.", iVal, "f");
        
        printf(format_string, iVal, dVal);//use format string with user inputs
            
        return 0;
    }
    
bool parseDbl(const char *str, double *val)
{
    char *temp = NULL;
    bool rc = TRUE;
    errno = 0;
    *val = strtod(str, &temp);

    if (temp == str || ((*val == -HUGE_VAL || *val == HUGE_VAL) && errno == ERANGE))
        rc = FALSE;

        return rc;
}
    
bool parseLong(const char *str, long *val)
{
    char *temp;
    bool rc = TRUE;
    errno = 0;
    *val = strtol(str, &temp, 0);

    if (temp == str || errno == ERANGE)
        rc = FALSE;

    return rc;
}
    
输出将为:

如果您有一个带值的变量,请说:

 double val = 3.234003467;  
您可以打印到小数点后第二位,例如使用:

printf("This is the value: %0.2f\n", val);
它将输出:
3.23

列出几个有用的格式说明符,以及如何/何时使用它们

下面是使用命令行输入创建格式字符串并打印浮点的完整示例,其中包含用户确定的宽度说明符:

给定以下命令行输入:
prog.exe 1.123423452345 4

使用以下代码:

#define TRUE 1
#define FALSE 0
#define bool BOOL

    bool parseDbl(const char *str, double *val);
    bool parseLong(const char *str, long *val);

    int main(int argc, char *argv[])//Use this signature rather than 
    {                               //int main(void) to allow user input
        if(argc != 3) //simple verification that command line contains 2 arguments
        {
            ;   
        }
        double dVal;
        long iVal;
        char format_string[80];
        
        if(parseDbl(argv[1], &dVal));//to simplify code, move the conversions to functions
        if(parseLong(argv[2], &iVal));
        
        //create the format string using inputs from user
        sprintf(format_string, "%s %s%d%s", "User input to \%d decimal Places:  ", "%0.", iVal, "f");
        
        printf(format_string, iVal, dVal);//use format string with user inputs
            
        return 0;
    }
    
bool parseDbl(const char *str, double *val)
{
    char *temp = NULL;
    bool rc = TRUE;
    errno = 0;
    *val = strtod(str, &temp);

    if (temp == str || ((*val == -HUGE_VAL || *val == HUGE_VAL) && errno == ERANGE))
        rc = FALSE;

        return rc;
}
    
bool parseLong(const char *str, long *val)
{
    char *temp;
    bool rc = TRUE;
    errno = 0;
    *val = strtol(str, &temp, 0);

    if (temp == str || errno == ERANGE)
        rc = FALSE;

    return rc;
}
    
输出将为:

请举一个例子,说明你想看到什么,以及你想看到什么。包括输入值的类型。
printf(“answer=%.*f”,m,answer)ismick的评论应该是一个答案,并且比下面的答案更好。这是C99兼容版本的从参数中获取精度。有一个SUS(“单一UNIX规范”)变体,允许按数字选择参数,但它不在C99中,而且看起来更复杂。请给出一个示例,说明输入的内容以及您希望看到的内容。包括输入值的类型。
printf(“answer=%.*f”,m,answer)ismick的评论应该是一个答案,并且比下面的答案更好。这是C99兼容版本的从参数中获取精度。有一个SUS(“单一UNIX规范”)变体,允许按数字选择参数,但C99中没有,看起来更复杂。