【发布时间】:2022-01-08 07:11:25
【问题描述】:
我被函数 double ascii_to_float 卡住了。我的函数应该接收一个 char 字符串并将其值作为双回。我不允许使用 atof()。
我想在字符串中搜索一个点,以证明它是否为双精度。如果不是,它应该返回 -1。
double ascii_to_float(char *textzahl)
{
int x;
double ausgabe;
sprintf(ausgabe,"%s",textzahl);
/* here with -=48, i´m not sure how to code
it right, i just now that i have to decrease with 48.*/
for(x=0; x< strlen(textzahl); x++)
{
if(textzahl[x]=='.')
{
textzahl[x]-=48;
}
else
{
textzahl[x]=-1;
}
}
return ausgabe;
}
main函数已经给出,所以我只需要写上面函数的代码。
#include <stdio.h>
#include <string.h>
int main()
{
char text[80];
double zahl2;
printf("\n bitte eine Zahl eingeben:"),
fgets(text, sizeof(text), stdin);
zahl2= ascii_to_float ( text);
if (zahl2==-1.0)
{
printf("\nfehlerhafte Eingabe oder Wert -1");
}
else
{
printf("\ndie Zahl2 lautet: %lf\n",zahl2);
}
}
【问题讨论】:
-
首先请尽量避免使用magic numbers)。如果值
48表示'0'的ASCII 代码,那么最好使用'0',因为它更清晰,并且对于不使用ASCII 的其他平台也可移植。 -
另外,请养成打印trailing换行符的习惯。当
stdout(printf写入)连接到实际终端时,它的 行缓冲,这意味着输出实际上是在换行符上写入终端。所以如果你打印一个前导换行符,那么你写的是 previous 行,而不是当前行。尾随换行符还将确保最后一个输出不会与终端提示混合。 -
你的作业的实际文本是什么?请edit您的问题包括完整和完整的作业文本,包括任何和所有要求和限制。还有其他几种方法可以使用标准 C 函数将字符串转换为
float,如果限制仅提及atof,那么您可以在其中一个函数中挑剔。 -
Start simple。你知道如何编写类似
atoi()的代码吗? -
如果字符串不包含小数点,作业是否告诉您返回 -1?如果不是,我不会那样做。将字符串
"123"转换为double值123.0是完全有效的。 (另外,如果你在错误时返回-1,你怎么知道它是一个实际的错误,还是转换字符串"-1.0"的结果?)
标签: c function char double ascii