Jump to content
    

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

Edited by sunjob

Share this post


Link to post
Share on other sites

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

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

?

Share this post


Link to post
Share on other sites

спасибо

 

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

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

Edited by sunjob

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...