我正在尝试优化我对一个需要快速双重扫描的问题的解决方案。我试图实现一个从标准输入读取双精度的函数,但我失败了。有人可以给我一些简单的代码来有效地实现这一点吗?提前致谢。
注意这里是我的尝试,它似乎有一些问题:
#include <stdio.h>
#include <stdlib.h>
inline double getDouble(FILE *f = stdin) {
char tmp[20], ch;
bool seen = false;
double sign = 1.0;
short index = 0;
while((ch = getc(stdin)) != EOF) {
if(ch == '-') {
sign = -1.0;
continue;
}
if(ch == ' ' || ch == '\n') {
if(seen) break;
} else {
seen = true;
tmp[index++] = ch;
}
}
return sign * (double)atof(tmp);
}
int main() {
int n;
scanf("%d", &n);
double *d = new double[n];
for(int i=0; i<n; ++i) {
d[i] = getDouble();
}
for(int i=0; i<n; ++i) {
printf("%.5lf\n", d[i]);
}
return 0;
}
输入:
16
-2 -1 -4 -5
1 1 1 1
1.233 -435 -2.44
3
2 3 42 4