gpt4 book ai didi

c - 如何在c中扫描一个紧跟字母 'e'的 float ?

转载 作者:太空狗 更新时间:2023-10-29 16:38:33 24 4
gpt4 key购买 nike

我正在尝试使用fscanf 读取数据,输入的一部分是一个 float 后跟字母'e',例如,41.72 已过去。在为 fscanf 编写 strng 时,我尝试使用 "%felapsed",但这不起作用,因为 %fe 是它自己的格式说明符。我如何使用 fscanf 读取它?

编辑:这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CHAR_MAX 1024

int main(int argc, char **argv)
{
FILE *file_in = fopen(argv[1], "r+");
char out_name[CHAR_MAX];
strcpy(out_name, argv[1]);
strcat(out_name, ".csv");
FILE *csv_out = fopen(out_name, "w");
int minutes;
float seconds;
fprintf(csv_out, "Trial #, Execution Time\n");

for (int i = 0; fscanf(file_in, "%*fuser %*fsystem %d:%felapsed %*d%%CPU (%*davgtest+%*davgdata %*dmaxresident)k\n%*dinputs+%*doutputs (%*dmajor+%*dminor)pagefaults %*dswaps\n", &minutes, &seconds) == 2; i++) {
fprintf(csv_out, "%d, %d:%.2f\n", i, minutes, seconds);
};
return 0;
}

这是一些示例输入:

283.97user 0.69system 1:13.77elapsed 385%CPU (0avgtext+0avgdata 107472maxresident)k

0inputs+4616outputs (0major+9550minor)pagefaults 0swaps

287.87user 0.35system 1:14.41elapsed 387%CPU (0avgtext+0avgdata 107328maxresident)k

0inputs+4616outputs (0major+9524minor)pagefaults 0swaps

最佳答案

这是scanf()的问题

"%f" 等 FP 格式将 e 视为引入求幂。由于 e 后面没有跟数字,因此停止扫描 float。但是 scanf() 已经准备好扫描一个过去的 e 并且 C 不需要 scanf() 能够备份超过1 个字符。所以使用简单的 "%f" 的代码不走运。

有些系统会备份超过 1 个字符,但 C 不需要这种能力。

代码需要一种新方法——在几秒钟内将其扫描为字符串

char sec[20];
int cnt = fscanf(file_in, "%d:%19[0-9. ]elapsed", &minutes, sec);
if (cnt == 2) {
seconds = atof(sec);
...
}

关于c - 如何在c中扫描一个紧跟字母 'e'的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36086616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com