Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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_Function_Calculator_Avr_Atmega - Fatal编程技术网

C 创建函数并在主程序中调用

C 创建函数并在主程序中调用,c,function,calculator,avr,atmega,C,Function,Calculator,Avr,Atmega,我有一个AVR编程的案例 case (0xe7): keyPressed="."; 在此期间,我想调用一个预定义函数 switch (keyCode) //generating key characetr to display on LCD { case (0xee): keyPressed="1"; b=1; a=a*10+b; i=i++; break; case

我有一个AVR编程的案例

case (0xe7): keyPressed=".";
在此期间,我想调用一个预定义函数

switch (keyCode)               //generating key characetr to display on LCD
{

case (0xee): keyPressed="1";
            b=1;
            a=a*10+b; 
            i=i++;
            break;
case (0xed): keyPressed="4";
            b=4;
            a=a*10+b; 
            i=i++;
            break;
case (0xeb): keyPressed="7";
            b=7;
            a=a*10+b; 
            i=i++;
            break;
case (0xde): keyPressed="2";
            b=2;
            a=a*10+b; 
            i=i++;
            break;
case (0xdd): keyPressed="5";
            b=5;
            a=a*10+b; 
            i=i++;
            break;
case (0xdb): keyPressed="8";
            b=8;
            a=a*10+b; 
            i=i++;
            break;
case (0xd7): keyPressed="0";
            b=0;
            a=a*10+b; 
            i=i++;
            break;
case (0xbe): keyPressed="3";
            b=3;
            a=a*10+b; 
            i=i++;
            break;
case (0xbd): keyPressed="6";
            b=6;
            a=a*10+b; 
            i=i++;
            break;
case (0xbb): keyPressed="9";
            b=9;
            a=a*10+b; 
            i=i++;
            break;
}
我如何制作函数??在主程序中我的案例中调用它? 请引导我,我对这一切都是新的。。。
请帮帮我。

假设,在您的情况下,当您按avr键时,您会得到Keycode值。例如,当您按1键时,您会得到地址1;当您按2键时,您会得到地址2;当您按3键时,您会得到地址3;等等,当您按9键时,您会得到地址9。你会得到地址10。 但在c语言中,您并没有得到这样的输入。使用scanf读取标准输入。重复循环,直到按下“.”

每次按键时,您都会按住keypressed键,并将该键添加到按键顺序和按键次数中

b=whichkeypressed;
a=a*10+b;
i++;
如果按3,2,1和。然后a=321,b=1,i=3

按“.”后 您正在调用您正在计算的预定义函数

c=pow(10,i); 
i=3 => c=1000
and d=a/c;
a=321 ,c=1000
d=0.321 
执行上述操作的代码为:

#include<stdio.h>
#include<math.h>
int a,b,i;
double  c,d;


void function()
{
c= pow(10,i);
d=a/c;
}


main()
{

int keyCode;
char keyPressed;

while(1)
{
printf("Enter Keycode: ");
scanf("%d",&keyCode);

switch (keyCode)               //generating key characetr to display on LCD
{

case 1: keyPressed='1';
            b=1;
            a=a*10+b;
            i++;
            break;
case 4: keyPressed='4';
            b=4;
            a=a*10+b;
            i++;
            break;
case 7: keyPressed='7';
            b=7;
            a=a*10+b;
            i++;
            break;
case 2: keyPressed='2';
            b=2;
            a=a*10+b;
            i++;
            break;
case 5: keyPressed='5';
            b=5;
            a=a*10+b;
            i++;
            break;
case 8: keyPressed='8';
            b=8;
            a=a*10+b;
            i++;
            break;
case 0: keyPressed='0';
            b=0;
            a=a*10+b;
            i++;
            break;
case 3: keyPressed='3';
            b=3;
            a=a*10+b;
            i++;
            break;
case 6: keyPressed='6';
            b=6;
            a=a*10+b;
            i++;
            break;
case 9: keyPressed='9';
            b=9;
            a=a*10+b;
            i++;
            break;

case 10: keyPressed='.';
             printf("No of Times Keys Pressed are = %d\n",i);

             function();
                printf("sequence of keys pressed=%d \nlast key pressed=%d\npower value of Keys=%lf\n The decimal valueof given sequence of keys=%6.10lf\n",a,b,c,d);   //use c and d with the values what you required.

                                break;

        }

        if (keyPressed=='.')
        break;

        }
getchar();
}

对于avr,您需要在case地址和next keypressed语句以及一些附加语句中进行一些必要的更改

不要执行
i=i++
,它的行为是未定义的。实际上,我希望整数“a”存储为整数,然后再除以10^i,得到十进制形式。。i表示按键的总数。。请给我指路好吗?
i++相当于
i=i+1
Joachim是对的。同样,在
大小写
标签表达式周围加括号也没有意义。只是
case 0xe7:
等等更干净一些。@ndj,
i++
i=i+1
的返回值不同
i=i++
是UB,而
i=i=i+1
是(我认为)有效的。对不起,我无法得到想要的结果:/@MohitGoyal编辑了答案。如果我的假设是正确的,那么你会从中得到一些需要的东西。
Enter Keycode: 1
Enter Keycode: 2
Enter Keycode: 3
Enter Keycode: 4
Enter Keycode: 5
Enter Keycode: 6
Enter Keycode: 7
Enter Keycode: 8
Enter Keycode: 9
Enter Keycode: 10
No of Times Keys Pressed are = 9
sequence of keys pressed=123456789
last key pressed=9
power value of Keys=1000000000.000000
The decimal valueof given sequence of keys=0.1234567890