roboforum.ru

Технический форум по робототехнике.

НЕ работает такой код scanf("%[^01]", str1);

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

НЕ работает такой код scanf("%[^01]", str1);

Сообщение aleksandr2677 » 25 ноя 2012, 15:06

Добрый день, помогите пожалуйста разобраться с парсингом.
Пробую выводить на терминал символы с помощью такого кода:
char str1[10], str2[10];
scanf("%s%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Так всё получается, все символы которые пришли выходят на терминал. Однако когда я добавляю в код []для исключения принимаемых символов, на терминал выходят пустые значения.
char str1[10], str2[10];
scanf("%[^0123456789]%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Вроде вставляю в проект готовые примеры из найденных статей, но ничего не работает(
Гляньте мой файлик. В архиве лежат проекты Codevision, VMlab и Proteus
Вложения
SSCANF.rar
(89.92 КиБ) Скачиваний: 0
aleksandr2677
 
Сообщения: 17
Зарегистрирован: 09 мар 2010, 09:18
Откуда: Санкт Петербург

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 15:42

ВВод-то какой?
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение aleksandr2677 » 25 ноя 2012, 16:00

Ввожу с терминала или считываю массив с помощью sscanf.
aleksandr2677
 
Сообщения: 17
Зарегистрирован: 09 мар 2010, 09:18
Откуда: Санкт Петербург

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 16:27

Так ЧТО вводится? Что с терминала - это я вижу.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение aleksandr2677 » 25 ноя 2012, 16:46

Ну вобще я планирую разложить по полочкам данные которые приходят с GPS модуля EB 500.
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
$GPVTG,309.62,T,,M,0.13,N,0.2,K*6E
$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18
Сейчас я пытаюсь научится обрабатывать строку, ну например, abcd12345ifg хочу раскидать её на 3 массива, "abcd" "12345" "ifg" .
И собственно не могу понять почему scanf("%s", str1); работает
а scanf("%[^0123456789]", str1); не работает?
aleksandr2677
 
Сообщения: 17
Зарегистрирован: 09 мар 2010, 09:18
Откуда: Санкт Петербург

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 17:47

scanf("%[^0123456789]", str1); не работает?
Этот сканф, по идее, должен взять последовательность нецифр в начале ввода. И, если он ее нашел, вернуть единицу.

Лично я NMEA парсю вот таким матюгом:
Код: Выделить всёРазвернуть
      double fTime;
      int  aTime;
      char aLat[11];
      char aLng[11];
      float aSog;
      float aCog;
      int varCount = sscanf(nmeaLine,"$GPRMC,%lf,%c,%7s%*d,%c,%8s%*d,%c,%f,%f,%*6s,%*f,%*c",
         &fTime, &state,
         &aLat[1],aLat,&aLng[1],aLng,
         &aSog,&aCog);
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение Romikgy » 25 ноя 2012, 19:42

что то я не слышал , что бы sscanf понимал regexp ....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 19:45

Это не regexp, хотя немного похож. По доке должно работать, но я сам не пробовал.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение Romikgy » 25 ноя 2012, 19:48

по какой доке?
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 19:52

Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение Romikgy » 25 ноя 2012, 20:15

что то я того же в доках по winavr gcc не вижу ....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение aleksandr2677 » 25 ноя 2012, 21:01

Что то начинает вырисовываться, сейчас поэкспериментирую.
И всё таки по поводу такой записи
char str1[10], str2[10];
scanf("%[0123456789]%s", str1, str2);
printf("\n%s\n%s",str1,str2);
Если верить статье http://www.realcoding.net/articles/funktsii-standartnogo-vvodavyvoda-printf-scanf.html
то если на терминале ввести набор символов:
12345abcdefg456
На экране программа выдаст:
12345
abcdefg456
А у меня терминал VM lab выдаёт только <LF> а в окне Watch напротив str1 и str2 <NUL>,<NUL>,<NUL>,...

Что же я делаю не так? Может глянете мой проект.
aleksandr2677
 
Сообщения: 17
Зарегистрирован: 09 мар 2010, 09:18
Откуда: Санкт Петербург

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение elmot » 25 ноя 2012, 21:19

Возможно сишная библиотека для АВР не держит такой формат
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение aleksandr2677 » 26 ноя 2012, 21:38

У меня такое ощущение что библиотека для avr такой
Код: Выделить всёРазвернуть
%lf
функции тоже не содержит(
aleksandr2677
 
Сообщения: 17
Зарегистрирован: 09 мар 2010, 09:18
Откуда: Санкт Петербург

Re: НЕ работает такой код scanf("%[^01]", str1);

Сообщение Aseris » 26 ноя 2012, 21:56

Обработка на чем прводится PC/MC?
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16