Объясняю, что я хотел сказать последним if-else. Если newline2 равна концу строки, то печатается "ok". Если нет, то возвращается назад на один символ и считывает float-переменную value3.
Но вышеуказанная программа не выполняет возврат назад (считывает число начиная со второй цифры).
Можно ли осуществить то что я хочу?
gtn-gagarin, пересмотрите лучше алгоритм.
Я для таких штук работаю со строками, т.е. читаю строку целиком в буфер и далее с ней можно делать что угодно легко и просто, разбивать на токены и т.п.
успехов
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
if(fscanf(fin, "%f %f", &v1, &v2) != 2)
{//обработка ошибки}
long pos = ftell(fin);
if(fscanf(fin, "%f\n", &v3) == 1)
//введены 3 числа
else
{//то-ли ошибка, то-ли нет третьего числа
fseek(fin, pos);
if(fgetc(fin) == '\n')
//два числа
else
//ошибка
}
Ну и добавить проверку не ошиблись ли ftell()&fseek() А если всё равно, что будет при ошибке, можно ещё половину кода выкинуть.
ЗЫЖ uptime, а ты не задумывался, как ввести float из строки? atof()&sscanf() не подходят, непонятно с какого символа продолжать разбор строки. Т.ч. придётся самому писать const char *atof(const char *, float *)...
ЗЫЖ uptime, а ты не задумывался, как ввести float из строки? atof()&sscanf() не подходят, непонятно с какого символа продолжать разбор строки. Т.ч. придётся самому писать const char *atof(const char *, float *)...
char *p, string[ 1000 ]
float first, second, ...;
fscanf( file, "%s", string ); // читаем строку в буфер.
p = strtok( string, ", " ); // предполагая, что числа в строке разделены пробелами или запятыми
first = atof( p );
p = strtok( NULL, ", " );
second = atof( p );
p = strtok( NULL, ", " );
third = atof( p );
Угу. Долго вспоминал, за что я её ненавижу, перечитал man, вспомнил: я два дня из-за неё медетировал, потом таки достиг просветления. Зарёкся больше никогда так не делать. Подумаешь, применил в функции с ней, свою функцию, тоже с нею... Теперь только strpbrk(). Что касается темы, я имел ввиду ввод числа до первого символа невходящего в число, как fscanf, у тебя такие "числа" пройдут: "7аовлат ".
Ну, мне кажется, я бы попытался прочесть все данные, а потом смотрел по результатам,
если значение val3 не изменилось - скорее всего 3ег
Да? А вот и нет, это введёт 3 числа. А если в файле нет чисел оставит val3 без изменения(кстати как ты это узнаешь, может я ноль ввести хочу?). Но по условию числа вводить надо до '\n', а не до конца файла. Без сомнения топик стартер так поначалу и сделал, но - не получилось.
или можно записать всю строку в буффер с помощью ifile.gets(s); и уже в ней разбираться сколько где чисел
ifile >> st загонит в st только 1е слово, т.е. одно число. В принципе можно проверять не изменилась ли строка, но выглядеть будет все более громоздко. Да и вообще - нет предела совершенству)