реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> avr-gcc проблема с scanf()
sunjob
сообщение May 4 2018, 10:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 13-12-17
Пользователь №: 100 639



avr-gcc проблема с scanf()

добрый день

вопрос применительно к avr-gcc/atmel-toolchain
код проверялся и пытался по всякому ... (ни шмагли никак :о)

принять одно число для scanf() - не проблема
проблемы начинаются, когда надо принять два числа:
- не принимает "оба" числа, либо если принимает (первый пример), то "первое" число = 0
- при "неправильном" типе - уходит в зацикливание

судя по скудным высказываниям по поводу scanf() - для avr-gcc это "нормальное поведение" и "все на это уже давно забили"

высказываемся, можно с кодом/примерами, можно просто "ключевые слова" или пофилософствовать...

спасибо

Код
uint8_t A,B;
while(1)
  {
  DEV = -1, SIG = -1;
  scanf  ("%u%,%u",&A,&B);
  printf ("A='%u', B='%u' \n",A,B);
  }

выхлоп

//
// scanf  ("%u%*c%u",&A,&B);
// input: '1+2'
//
A='0', B='2'

//
// scanf  ("%u% %u",&A,&B);
// input: '1 2'
//
A='1', B='65535'
A='2', B='65535'

//
// scanf  ("%u%,%u",&A,&B);
// input "1,2"
//
A='1', B='65535'
A='65535', B='65535'
A='65535', B='65535'
... loop ... зацикливание ...


- avr-gcc-4.9.2 / atmel-toolchain 3.4.2 and 3.5.4 / linux
- avr-studio-4.19 / win_xp
- variation with key-library (-Wl,-u,vfprintf -lprintf_min, -Wl,-u,vfprintf -lprintf_flt, -Wl,-u,vfscanf -lscanf_min, -Wl,-u,vfscanf -lscanf_flt...)
- build witn makefile & shell-script

Сообщение отредактировал sunjob - May 4 2018, 10:31
Go to the top of the page
 
+Quote Post
megajohn
сообщение May 4 2018, 10:47
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(sunjob @ May 4 2018, 14:05) *
scanf ("%u%,%u",&A,&B);


пишите scanf ("%u%%,%u",&A,&B);


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение May 4 2018, 13:16
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



Цитата(sunjob @ May 4 2018, 11:05) *
[code]uint8_t A,B;
...
scanf ("%u%,%u",&A,&B);
...

вообще, тут, видимо, не стоит рассчитывать на нормальное поведение )

что скажет следующая строчка:
CODE
printf("%u %u %u", sizeof(unsigned), (unsigned)&A, (unsigned)&B);

?
Go to the top of the page
 
+Quote Post
sunjob
сообщение May 4 2018, 16:41
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 13-12-17
Пользователь №: 100 639



спасибо

я по невнимательности вставил код, которым "уже всяко-разно" понаэкспериментировал ...sm.gif (он естественно весь испахабленный)
невнимательность плюс желание сэкономить (использовать 8бит), умные люди помогли

рабочий код

Код
uint8_t A,B;

while(1)
  {
  A = -1, B = -1;
  scanf  ("%hhu%hhu",&A,&B);
  printf ("A='%u', B='%u'\n", A,B);
  //
  // or
  //
  scanf ("%" SCNu8 "%" SCNu8 , &A,&B);
  printf ("A='%" PRIu8 "', B='%" PRIu8 "'\n", A,B);
  }


Сообщение отредактировал sunjob - May 5 2018, 04:26
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 21:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016