编写程序,以字符形式从终端读入一个带小数点的数和一个回车(假设没有输入错误),把它翻译成计算机内部表示的数。数的形式类似于1234.567。本题要求不能使用scanf函数直接读入,所以只能一个字符一个字符地读入,然后再把它们拼起来,并翻译成计算机内部的数。
#include <stdio.h>
int main(void) {
char ch;
int n=0,i;
double f=0,g,h=1;
printf("请输入一个浮点数:");
ch=getchar();
while(ch<'0'||ch>'9'){
ch=getchar();
}
while(ch>='0'&&ch<='9'){
n=n*10+(ch-'0');
ch=getchar();
}
if(ch=='.')ch=getchar();
while(ch>='0'&&ch<='9'){
h=h/10;
g=ch-'0';
f=f+g*h;
ch=getchar();
}
printf("%f",n+f);
return 0;
}
chatgpt版:使用一个布尔变量hasDecimal来标记是否已经读取到小数点,以便更好地控制整数部分和小数部分的处理
#include <stdio.h>
#include <stdbool.h>
int main(void) {
char ch;
int n = 0;
double f = 0;
double decimalPlace = 0.1;
bool hasDecimal = false;
printf("请输入一个浮点数:");
ch = getchar();
while (ch < '0' || ch > '9') {
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
n = n * 10 + (ch - '0');
ch = getchar();
}
if (ch == '.') {
hasDecimal = true;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
f = f + (ch - '0') * decimalPlace;
decimalPlace /= 10;
ch = getchar();
}
if (hasDecimal) {
printf("%.6f\n", n + f);
} else {
printf("%d\n", n);
}
return 0;
}