Я пытаюсь использовать fscanf
для чтения данных, а частью ввода является поплавок, за которым следует буква 'e'
, например, 41.72elapsed
. При написании strng для fscanf
я попытался использовать "%felapsed"
, но это не сработает, так как %fe
является его собственным спецификатором формата. Как я прочитал бы это при использовании fscanf
?Как сканировать поплавок, за которым следует буква «e» в c?
редактировать: Вот код:
#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
«*'% fe' - это собственный спецификатор формата. * " Это? Что бы это ожидало? – alk
Да, это так. e указывает научную нотацию с показателем. Причина моего вопроса заключается в том, что, фактически протестировав это, использование% fe не работает по этой причине. – user2093696
"* e указывает научную нотацию *" нет, это не так. Возможно, вы имеете в виду '% e', это последнее эквивалентно'% f'. Спецификаторы преобразования не являются суффиксами. Также не существует модификатора длины 'f'. – alk