Have you looked into the %[ specifier?
Code:
/* file.txt
line.1 line_2 line~3
*/
#include <stdio.h>
void foo(const char *filename, int delimiter)
{
FILE *file = fopen(filename, "r");
if ( file )
{
char format[10], result[32];
sprintf(format, "%%%d[^%c]", (int)(sizeof result - 1), delimiter);
printf("format = \"%s\"\n", format);
if ( fscanf(file, format, result) == 1 )
{
printf("result>>\n%s\n<<\n", result);
}
}
else
{
perror(filename);
}
}
int main (void)
{
foo("file.txt", '_');
return 0;
}
/* my output
format = "%31[^_]"
result>>
line.1 line
<<
*/