Подскажите, плз, как организовать ввод чисел, разделённых трубой?

bvasilik

В Си? Я беру обычный fscanf, читаю поток, но когда в нём попадается символ |, он зацикливатеся
Почему и как это исправить, подскажите, пожалуйста?

mirt1971

Это - бред. Покажи лучше код.

zontik

самое простое: делай
if (fscanf(in,"%f",&num)==1)
{
...
}
else
{
fgetc(in);
}

bvasilik

Может, и бред
Ничего особенного в коде нет...
Ну, что-то типа этого:
double per1,per2,per3;
FILE *datafile;
datafile = fopen ("file","r");
while (feof(datafile) == 0){
fscanf (datafile,"%lf %lf %lf",per1,per2,per3);
}
а в файле - строчки с полями из трёх чисел. А иногда после числа без пробела идет труба. Например:
1.234|

mirt1971

Блин. А я себе уже нафантазировал... Тогда делай как сказано выше.

bvasilik

Мне нужно считывать около двадцати чисел из строчки в структуру...

zontik

какие проблемы? делаешь функцию
bool read_next_double_from_file (FILE *in, double *result)
{
while (fscanf (in, "%lf", result) != 1)
{
if (feof (in return false;
fgetc (in);
}
return true;
}

bvasilik

Круто!
А я туплююю...
Спасибо, сейчас попробую...

bleyman

Хо хо хо. Фсканф - говно!
Маза сделать fgets, а потом уже пытаться с этой строчкой что-нить сотворить.

mirt1971

Угу. А потом еще поебаться с тем что половина числа в одной строке(про параметр size не забыл? а другая половина - в другой.

bleyman

Ну ты знаешь, по сравнению с тем, что происходит когда ты делаешь хоть немного нетривиальный фсканф а он обламывается - это все херня. Можно поставить size = 2048.

mirt1971

Когда обламывается scanf - не происходит ровным счетом НИЧЕГО. Просто указатель в буфере не перемещается Пусть уж лучше библиотека занимается управлением буферами, у нее это получится получше... И без глюков, что важнее.

bvasilik

Не, у меня только один глюк может возникнуть, труба эта.

FRider

Хо Хо Хо fgets гавно.
Почтиай Лебланка "Защищенный код".

frant5

в электронном виде есть?
зы: че-то фамилия афтора меня не вдохновляет

FRider

У меня в электронном нет. Ты о людях по фамилиям судишь?
Оставить комментарий
Имя или ник:
Комментарий: