C:变量保留以前操作的值,而不是重置
我是C语言的新手,在Proteus上尝试了一些arduino项目。我最近尝试用Peter Fleury的库实现一个键盘和LCD接口,到目前为止,我输入的字符显示得很好,但我在尝试打印到串行端口时遇到了一个问题。这就像每次迭代时键的值都被连接在一起,因此输出有如下额外字符: 逗号前的值来自“key”变量,逗号后的值来自“buf”变量: 151 (第二次迭代中的5i输入被添加到第一次迭代中的1中,然后放入变量I print中) 我想这可能是因为我缺少/不正确使用指针,以下是我的代码:C:变量保留以前操作的值,而不是重置,c,arduino,avr,C,Arduino,Avr,我是C语言的新手,在Proteus上尝试了一些arduino项目。我最近尝试用Peter Fleury的库实现一个键盘和LCD接口,到目前为止,我输入的字符显示得很好,但我在尝试打印到串行端口时遇到了一个问题。这就像每次迭代时键的值都被连接在一起,因此输出有如下额外字符: 逗号前的值来自“key”变量,逗号后的值来自“buf”变量: 151 (第二次迭代中的5i输入被添加到第一次迭代中的1中,然后放入变量I print中) 我想这可能是因为我缺少/不正确使用指针,以下是我的代码: #inclu
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "mat_kbrd.h"
#include "funciones.h"
#include "menu.h"
char buf[256];
char* coma = ",";
int main(void)
{
pin_init();
serial_begin();
lcd_init(LCD_DISP_ON);
kbrd_init();
bienvenida();
while (1) {
int i = 0;
char key = 0;
//char *peso;
//int pesoSize = 1;
char peso[100];
//peso = calloc(pesoSize,sizeof(char));
int salida = 0;
lcd_clrscr();
desechos();
key = kbrd_read();
if (key != 0) {
lcd_gotoxy(0,3);
lcd_putc(key);
_delay_ms(2000);
lcd_clrscr();
cantidad();
while (salida != 1) {
char keypeso = 0;
keypeso = kbrd_read();
//pesoSize = i;
//peso = realloc(peso,pesoSize*sizeof(char));
if (keypeso != 0) {
if (keypeso == '+') {
salida = 1;
keypeso = *("");
lcd_clrscr();
calcularTotal(key,peso);
_delay_ms(2000);
} else {
lcd_gotoxy(i,1);
lcd_putc(keypeso);
snprintf(peso, sizeof peso, "%s%s",peso, &keypeso);
//strcat(peso,&keypeso);
i++;
_delay_ms(2000);
}
}
}
snprintf(buf, sizeof buf, "%s%s%s", &key,coma,peso);
serial_println_str(buf);
}
}
}
#包括
#包括
#包括
#包括
#包括“lcd.h”
#包括“mat_kbrd.h”
#包括“functiones.h”
#包括“menu.h”
char-buf[256];
字符*coma=“,”;
内部主(空)
{
pin_init();
串行_begin();
lcd_init(lcd_DISP_ON);
kbrd_init();
bienvenida();
而(1){
int i=0;
字符键=0;
//查尔*比索;
//int-pesoSize=1;
查尔比索[100];
//比索=calloc(pesoSize,sizeof(char));
int-salida=0;
lcd_clrsc();
去回声();
key=kbrd_read();
如果(键!=0){
液晶显示器(0,3);
液晶显示器(按键);
_delay_ms(2000年);
lcd_clrsc();
cantidad();
while(salida!=1){
char-keypeso=0;
keypeso=kbrd_read();
//pesoSize=i;
//比索=realloc(比索,比索化*sizeof(char));
如果(基比索!=0){
如果(keypeso=='+'){
salida=1;
基比索=*(“”);
lcd_clrsc();
计算总额(基币,比索);
_delay_ms(2000年);
}否则{
液晶显示器(i,1);
液晶显示器(基比索);
snprintf(比索、比索大小、%s%s、比索和基比索);
//strcat(比索和基比索);
i++;
_delay_ms(2000年);
}
}
}
snprintf(基本单位、基本单位、基本单位、基本单位、%s%s、&key、coma、比索);
连续打印序列(buf);
}
}
}
&key
和&keypeso
指向单个字符
,但您使用的是%s
格式说明符,因此尝试将字符串读入单个字符
。对单个字符使用%c
而不是%s
,并传递char
而不是char的地址。可能是snprintf(比索,比索的大小,“%s%s”,比索,&keypeso)
您用自身覆盖比索
数组。这看起来像是将keypeso
追加到peso
数组中这是一种奇怪的书写方式keypeso='\0'代码>keypeso
不是字符串,“%s”和&keypeso
没有意义。将同一字符串用作snprintf的输入和输出会导致未定义的行为