Обработка на празни пространства с функция scanf() в C

Имам следния проблем. Бих искал да сканирам три точки от scanf в следния формат: {[4;-1],[7;1.5],[4;4]}. Моят код изглежда така:

scanf("{[%lf;%lf],[%lf;%lf],[%lf;%lf]}", &a1, &a2, &b1, &b2, &c1, &c2)

Сега всъщност тествам това да е правилно преобразуване за по-нататъшна работа с него. Но бих искал да позволя на потребителя да въведе нещо подобно

{ [ 4 ; -1 ] , [ 7 ; 1.5 ] , [ 4 ; 4 ] }

или дори

    {  [ 


     4 ; 

     -1 ] ,  [ 7 ;                         1.5 ] , [   4 ; 4 


] } 

така че scanf() все още е в състояние да ми даде 6 правилни реализации. Какво трябва да направя?


person Michal Dvořák    schedule 29.10.2018    source източник
comment
Множество въпроси на SO задават въпроси относно този формат на данни, включително: stackoverflow.com/questions/53145987; stackoverflow.com/questions/53132823; stackoverflow.com/questions/53042562; stackoverflow.com/questions/53042562; stackoverflow.com/questions/53037182; stackoverflow.com/questions/53034556 — всички те питат за един и същ нов за SO през Есен 2018 формат на данни под една маска или друг.   -  person Jonathan Leffler    schedule 05.11.2018


Отговори (1)


За да позволите празни интервали, празно пространство преди всяко непразно пространство.

// "{[%lf;%lf],[%lf;%lf],[%lf;%lf]}"
" { [%lf ;%lf ] , [%lf ;%lf ] , [%lf ;%lf ] }"

Кодът може също да добави интервал преди "%lf", но това не променя функционалността, тъй като този спецификатор вече използва незадължително водещо бяло пространство.

" { [ %lf ; %lf ] , [ %lf ; %lf ] , [ %lf ; %lf ] }"
person chux - Reinstate Monica    schedule 29.10.2018