Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:变量保留以前操作的值,而不是重置_C_Arduino_Avr - Fatal编程技术网

C:变量保留以前操作的值,而不是重置

C:变量保留以前操作的值,而不是重置,c,arduino,avr,C,Arduino,Avr,我是C语言的新手,在Proteus上尝试了一些arduino项目。我最近尝试用Peter Fleury的库实现一个键盘和LCD接口,到目前为止,我输入的字符显示得很好,但我在尝试打印到串行端口时遇到了一个问题。这就像每次迭代时键的值都被连接在一起,因此输出有如下额外字符: 逗号前的值来自“key”变量,逗号后的值来自“buf”变量: 151 (第二次迭代中的5i输入被添加到第一次迭代中的1中,然后放入变量I print中) 我想这可能是因为我缺少/不正确使用指针,以下是我的代码: #inclu

我是C语言的新手,在Proteus上尝试了一些arduino项目。我最近尝试用Peter Fleury的库实现一个键盘和LCD接口,到目前为止,我输入的字符显示得很好,但我在尝试打印到串行端口时遇到了一个问题。这就像每次迭代时键的值都被连接在一起,因此输出有如下额外字符:

逗号前的值来自“key”变量,逗号后的值来自“buf”变量:

151 (第二次迭代中的5i输入被添加到第一次迭代中的1中,然后放入变量I print中)

我想这可能是因为我缺少/不正确使用指针,以下是我的代码:

#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的输入和输出会导致未定义的行为