2014-09-18 82 views
-1

我是新进入编程的,我已经完成了第一个任务。该任务是关于将十进制输入转换为十进制和十六进制。 如果我fx类型15(输入),我应该得到15和F作为输出。 我不是从头开始构建程序。我的老师在Atmel Studio中为我提供了一个模板(如果我记得正确的话,该模板称为BasicIO)。 这是我迄今所做的:十进制到十六进制转换器

#define F_CPU 16000000UL 

#include <stdio.h> 
#include <avr/io.h> 
#include <util/delay.h> 
#include "usart.h" 

int main(void) {  

    uart_init(); // open the communication to the microcontroller 
    io_redirect(); // redirect input and output to the uart 

    int input=0; 

    while(1) { 
     printf("Input a number\n"); 
     scanf("%d %x", &input, &input); 
     printf("You wrote %d\n", input);   
    } 

    return 0; 
} 

有编译程序时没有错误,但我从来没有得到一个可以理解的输出,whenenver我输入的东西任何人都可以看看它的原因是什么?我应该改变什么?

这当然是C编程,我使用Atmel Studio制作程序,并使用Arduino在Realterm中运行它。 PS:据我所知,这是一个模板。我添加的唯一内容是%d,%x和&输入,我认为它们属于它们。

+2

你似乎是采取两个输入和返回一个输出。你不想要一个输入(十进制数)并返回两个输出(十进制+十六进制数)? – 2014-09-18 21:10:06

+0

是的,这正是我想要做的!但是,我应该如何重新排列变量,以便从1个输入中获得2个输出? – Gandhara 2014-09-18 21:14:42

回答

1

而不是

scanf("%d %x", &input, &input); 
    printf("You wrote %d\n", input); 

你需要

scanf("%d", &input); // Read one number 
    printf("You wrote %d %x\n", input, input); // Write it out in decimal and hex. 
+0

它现在完美的工作!非常感谢Sahu!但是另外一个让我对这个模板感到困惑的东西,我的老师并没有告诉我,这就是#define F_CPU 16000000UL和while(1)的含义。他们的目的是什么? – Gandhara 2014-09-18 21:25:29

+0

而且,为什么输入设置为等于零的整数? – Gandhara 2014-09-18 21:28:49

+0

'#define F_CPU'行的用途不是从发布的代码中清除。也许它用在你包含的一些.h文件中。 'while(1)'语句保持程序一直运行,除非被某些信号中断。 – 2014-09-18 21:31:16