2013-05-07 9 views
0

Сначала позвольте мне показать, что работает, тогда я покажу, что не работает. Этот код дает правильный результат.Получение значений массива от пользователя на PIC18?

unsigned long timeOn; 
long d[10]; 

d[0] = 8; 
d[1] = 6; 
d[2] = 0; 
d[3] = 0; 
d[4] = 0; 
timeOn = 10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] + d[4] ; 
printf("%lu",timeOn); 

Выход: 86000

Если я хочу, чтобы пользователь ввел следующие значения я получить другой результат, и это код у меня есть.

unsigned long timeOn; 
long d[10]; 
int i; 


for(i = 0; i < 5 ; i++) 
    { 
     while (!ConsoleIsGetReady()); 
     d[i] = ConsoleGet(); 

    } 

timeOn = 10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] + d[4] ; 
printf("%lu",timeOn); 

BYTE ConsoleGet(void) 
{ 
    char Temp; 

    while(IFS1bits.U2RXIF == 0); 

    Temp = U2RXREG; 
    IFS1bits.U2RXIF = 0; 
    return Temp; 
} 

Выход: 619328

Разве это не предполагают, чтобы работать таким же образом? Итак, как получается, когда пользователь вводит значения, я получаю другой результат? Спасибо!

ответ

0

Похоже, что консоль выводит символ (то есть код в ASCII), а не целое число. Просто попробуйте d[i] = ConsoleGet() - '0'; в вашем считываемом цикле.

+0

Кстати, вы получите тот же результат, если вы используете 'd [i] = getchar();' вместо 'scanf ("% d ", &d[i]);'. В этом разница между целым значением и символом код цифры (в ASCII, код «0» - 48, код «1» - 49 и т. д.) – Inspired

+0

Я очень ценю вашу помощь. Большое вам спасибо! – Ammar

Смежные вопросы