无法在c中获取字符串转换strtod
can't get string conversion strtod in c
有人可以帮助我吗(抱歉是英文),我正在尝试将字符串转换为双精度字符串,但是当我无法获取时,这是我的代码(谢谢,非常感谢您的帮助):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LONG 5
char bx[MAX_LONG];
double cali=0;
int main() {
scanf("%c",bx);
cali = strtod(bx,NULL);
printf("%f",cali);
return 0;
}
当我在输出中输入大于 10 的值时,它只打印第一个数字,如下所示:
input: 23
output: 2.00000
input: 564
output: 5.00000
你使用的scanf()
说明符是错误的,除非你指定了多个字符,但是这样数组就不会nul
终止,我建议如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char bx[6]; /* if you want 5 characters, need an array of 6
* because a string needs a `nul' terminator byte
*/
double cali;
char *endptr;
if (scanf("%5s", bx) != 1)
{
fprintf(stderr, "`scanf()' unexpected error.\n");
return -1;
}
cali = strtod(bx, &endptr);
if (*endptr != '[=10=]')
{
fprintf(stderr, "cannot convert, `%s' to `double'\n", bx);
return -1;
}
printf("%f\n", cali);
return 0;
}
您应该尝试进行此更改以使其生效。
首先:
更改
scanf("%c",bx); /*Here you're reading a single char*/
为此:
scanf("%s",bx);/*Now you're reading a full string (No spaces)*/
第二个:
变化
cali = strtod(bx,NULL);
为此:
cali = atof(bx);
我认为这对你来说是完美的。
有人可以帮助我吗(抱歉是英文),我正在尝试将字符串转换为双精度字符串,但是当我无法获取时,这是我的代码(谢谢,非常感谢您的帮助):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LONG 5
char bx[MAX_LONG];
double cali=0;
int main() {
scanf("%c",bx);
cali = strtod(bx,NULL);
printf("%f",cali);
return 0;
}
当我在输出中输入大于 10 的值时,它只打印第一个数字,如下所示:
input: 23
output: 2.00000
input: 564
output: 5.00000
你使用的scanf()
说明符是错误的,除非你指定了多个字符,但是这样数组就不会nul
终止,我建议如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char bx[6]; /* if you want 5 characters, need an array of 6
* because a string needs a `nul' terminator byte
*/
double cali;
char *endptr;
if (scanf("%5s", bx) != 1)
{
fprintf(stderr, "`scanf()' unexpected error.\n");
return -1;
}
cali = strtod(bx, &endptr);
if (*endptr != '[=10=]')
{
fprintf(stderr, "cannot convert, `%s' to `double'\n", bx);
return -1;
}
printf("%f\n", cali);
return 0;
}
您应该尝试进行此更改以使其生效。
首先: 更改
scanf("%c",bx); /*Here you're reading a single char*/
为此:
scanf("%s",bx);/*Now you're reading a full string (No spaces)*/
第二个: 变化
cali = strtod(bx,NULL);
为此:
cali = atof(bx);
我认为这对你来说是完美的。