在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中没有,看起来更复杂。