Чтение файла fgets(), sscanf()
Спасибо
можно попробовать обойтись fscanf, при этом в форматной строке нужно будет явно указать запятую
Это как? указать в качестве незначащего символа?
Такой вариант работать будет точно:
1. считать файл (или строку файла) в строковый буффер;
2. заменить символы запятой на символ пробела;
3. читать слова функцией sscanf, при этом форматная строка будет выглядеть просто - "%s %d ...";
Получаеися, что fgets и sscanf хватает ;)
Можно использовать какие-нибудь другие стандартные функции, типа strtok для поиска очередного слова после запятой.
Спасибо большое
Цитата: vAC
читать слова функцией sscanf, при этом форматная строка будет выглядеть просто - "%s %d ..."
А если "%s,%d,%f, и так далее" ? Функциям *scanf всё равно, какой символ пропускать, запятую или пробел.
Если есть строка "Hello, world!", то при чтении слов по формату "%s, %s" в первой получим "Hello,", а во второй вообще ничего, т.к. после первого слова запятая не встретилась (она включилась в первое). Строку и шаблон нужно задавать "дословно". Например, будут работать следующие пары:
"Hello ,world!" - "%s ,%s"
"Hello , world!" - "%s ,%s"
Первый работает потому, что мы сначала сообщили, что после первого слова стоит пробел и запятая, а после них второе слово.
Второй работает, т.к. пробел рассматривается как разделитель между запятой и вторым словом, поэтому он просто выбрасывается.
Такой вариант:
"Hello , world!" - "%s,%s"
Работать уже не будет, т.к. после чтения "Hello", scanf будет ждать запятую, а встретит пробел.
Вообщим проблема в том, что вы не остановите scanf перед уничтожением запятых в конце слова, для него они будут его частью.