Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uint8_t A,B;
...
 scanf  ("%u%,%u",&A,&B); 
...
вообще, тут, видимо, не стоит рассчитывать на нормальное поведение )

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

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо

 

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

невнимательность плюс желание сэкономить (использовать 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...