ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1044500 Топик полностью
fk0, легенда (16.10.2020 02:38, просмотров: 398) ответил Moлoдoй кoллeгa на Как scanf ом разделить вход на две строки, если разделитель или пробел или "_" ?
Лучше scanf'ом так не делать -- он плохо для этого приспособлен (и %[xxx] не работает в древних libc): 

https://coliru.stacked-crooked.com/a/8e176784e068e45d


#include <stdio.h>
#include <stdlib.h>

int main(int ac, const char *av[])
{
    int i = 0;
    while (++i < ac)
    {
        const char *str = av[i];
        unsigned begin[2] = {0, 0}, end[2] = {0, 0};
        sscanf(str, " %n%*[^ _]%n%*[ _]%n%*[^ _]%n", &begin[0], &end[0], &begin[1], &end[1]); 
    
        if (!end[0] || !end[1])
        {
            printf("'%s'     \t->\t invalid input\n", str);
        }
        else {
            const char *substr[2] = { &str[begin[0]], &str[begin[1]] };
            unsigned size[2] = { end[0] - begin[0], end[1] - begin[1] };
            printf("'%s'     \t->\t '%.*s' '%.*s'\n", str, size[0], substr[0], size[1], substr[1]);
        }
    }
    
    return 0;   
}
[ZX]