打印

c编程的问题

[复制链接]
3021|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奇兵|  楼主 | 2010-5-9 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
那位大侠给我分析一下为什么用 keil编译不了!谢谢!P1为按键(独立式)P2是二极管
#include<REG51.H>
   #define uchar unsigned char
   #define uint unsigned int
   char a=0;

   void key (void);
   void delay (uint);
   void dong (void);
    void main(void)
   {
     while(1){
      uchar i;
      key();
      switch (a)
      {
       case 0xfe:
            {P2=0x00;
             delay(500);
             P2=0xff;
             delay(500);
             }break;
        case 0xfd:
             { dong();
              }  break;
         case 0xfb:
              { char j=0xff;
                for (i=0;i<8;i++)
                   {
                      j=j<<1;
                     P2=j;
                      delay (500);
                    }
               } break;
          case 0xf7:
              {  char x=0xff;
                for (i=0;i<8;i++)
                   {
                      x=x>>1;
                     P2=x;
                      delay (500);
                    }
              } break;
          }
                     
       }
         void delay (uint k)                 总在则一行提示出错!
     {    uint i,j;
          for (i=0;i<k;i++)
         {for(j=0;j<121;j++){;}
         }
      }
          void key (void)
       {  P1=0xff;
          if (P1!=0xff)
           {delay(10);
            if (P1!=0xff)
              a=P1;
            }
        }                void dong (void)
                {  P1=0x0f;
                   delay(500);
                   P2=0xf0
                   delay(500);
         }

相关帖子

沙发
一棵小草| | 2010-5-9 15:07 | 只看该作者
写程序太乱了!最后能整理一下,这种错误不外乎少了或多了个分号,少了或多了个大括号。

使用特权

评论回复
板凳
奇兵|  楼主 | 2010-5-9 15:27 | 只看该作者
哈哈本人水平有限!有待提高!但不是多一个分号少一个分号那么简单吧!草哥

使用特权

评论回复
地板
一棵小草| | 2010-5-9 15:48 | 只看该作者
}                void dong (void)
                {  P1=0x0f;
                   delay(500);
                   P2=0xf0
                   delay(500);
         }

使用特权

评论回复
5
xuyiyi| | 2010-5-9 15:54 | 只看该作者
2楼:一棵小草 大侠真是高手,经验老道,说的对极了,少了一个分号,一个大括号。

加上后就编译通过,程序附后:

#include<REG51.H>
#define uchar unsigned char
#define uint unsigned int
char a=0;

void key (void);
void delay (unsigned int);
void dong (void);

void main(void)
{
  while(1){
  uchar i;
  key();
  switch (a)
     {
         case 0xfe:
            { P2=0x00;
              delay(500);
              P2=0xff;
              delay(500);
             } break;
        case 0xfd:
             { dong();
             } break;
         case 0xfb:
             { char j=0xff;
               for (i=0;i<8;i++)
                  {
                    j=j<<1;
                    P2=j;
                    delay (500);
                  }
               } break;
          case 0xf7:
              { char x=0xff;
                for (i=0;i<8;i++)
                   {
                     x=x>>1;
                     P2=x;
                     delay (500);
                   }
              } break;
      }
      }
}

void delay (uint k)                     // 总在则一行提示出错!
{  uint i,j;                                 
   for (i=0;i<k;i++)
      { for(j=0;j<121;j++){;}
      }
}

void key (void)
{  P1=0xff;
   if (P1!=0xff)
      { delay(10);
        if (P1!=0xff)
           a=P1;
      }
}

void dong (void)
{  P1=0x0f;
   delay(500);
   P2=0xf0;
   delay(500);
}

使用特权

评论回复
6
奇兵|  楼主 | 2010-5-9 16:24 | 只看该作者
小弟佩服我以后会细心的编程的,谢谢二位!草哥佩服!:(

使用特权

评论回复
7
奇兵|  楼主 | 2010-5-9 16:34 | 只看该作者
怎么能避免一个程序中确保不缺少大括号呢?

使用特权

评论回复
8
strang| | 2010-5-9 16:49 | 只看该作者
要规范编程

使用特权

评论回复
9
奇兵|  楼主 | 2010-5-9 17:59 | 只看该作者
噢!谢谢指点!有哪些规范呀?

使用特权

评论回复
10
iciciu| | 2010-5-9 19:02 | 只看该作者
这样的错误编译器都给不出提示。。。。。

要是程序大了就比较麻烦 。。。。

使用特权

评论回复
11
linqing171| | 2010-5-9 22:05 | 只看该作者
保证不出现大括号就是要不停的格式化代码。

使用特权

评论回复
12
yidou| | 2010-5-9 23:01 | 只看该作者
什么叫格式化代码?

使用特权

评论回复
13
linqing171| | 2010-5-10 13:02 | 只看该作者
一般用第三方文本编辑器的话,里面都有个菜单叫 格式化。
可以自动匹配大括号之类的。

我用notepad+ 写完了代码,用一下按c++格式化,然后大括号,缩进什么的都自动对齐。看着直观。
如果用keil的话,现在的版本也可以把插入点放大括号前面,另外半边大括号就高亮了。

使用特权

评论回复
14
xiangdongyang| | 2010-5-10 13:11 | 只看该作者
还可以用C来写个程序,让程序自己来检测括号的匹配的。

使用特权

评论回复
15
一棵小草| | 2010-5-10 13:58 | 只看该作者
格式化规范化就是对于程序,怎么命名函数,编辑风格,怎么注释等等------

你在网上搜索“规范化 编程” ,一般都有的。

比如,你的程序:

#include<REG51.H>
#define uchar unsigned char
#define uint unsigned int

/*************************************************
**变量定义
*************************************************/
char a=0;

/*************************************************
**函数声明
*************************************************/
void key (void);
void delay (uint);
void dong (void);

/*************************************************
**函数区域
*************************************************/

//---------------------------------------------------------------------
//input  : none
//output: none
//--------:
//---------------------------------------------------------------------
void main(void)
{
        while(1)
       {
               uchar i;
               key();
               switch    (a)
               {
                       case 0xfe:
                      {
                              P2=0x00;
                              delay(500);
                              P2=0xff;
                              delay(500);
                              break;
                      }
                      case 0xfd:
                      {
                             dong();
                             break;
                      }  
                      case 0xfb:
                      {
                             char j=0xff;
                             for (i=0;i<8;i++)
                            {
                                     j=j<<1;
                                     P2=j;
                                     delay (500);
                            }
                            break;
                      }
                      case 0xf7:
                     {  
                             char x=0xff;
                             for (i=0;i<8;i++)
                            {
                                    x=x>>1;
                                    P2=x;
                                    delay (500);
                            }
                            break;
                      }
               }         
        }
               //一看上去,主函数明显少个大括号

//---------------------------------------------------------------------
//input  : none
//output: none
//--------:
//---------------------------------------------------------------------
void delay (uint k)                 总在则一行提示出错!
{   
         uint i,j;
          for (i=0;i<k;i++)
         {
                 for(j=0;j<121;j++)
                 {
                          ;
                 }
         }
}

//---------------------------------------------------------------------
//input  : none
//output: none
//--------:
//---------------------------------------------------------------------
void key (void)
{  
         P1=0xff;
         if (P1!=0xff)
         {
                  delay(10);
                  if (P1!=0xff)
                  a=P1;
         }
}     

//---------------------------------------------------------------------
//input  : none
//output: none
//--------:
//---------------------------------------------------------------------        
void dong (void)
{  
         P1=0x0f;
         delay(500);
         P2=0xf0       //一看上去,明显少个符号
         delay(500);
}


规范化可以避免这些错误,同时,人家看程序也条理清晰

使用特权

评论回复
16
dragonzxs| | 2010-5-10 15:32 | 只看该作者
我也经常发生,括号和分号的问题,个人总觉就是:代码写的不规范,括号的位置放置不一致。所以少了多了括号和分号不容易发现。

使用特权

评论回复
17
奇兵|  楼主 | 2010-5-15 08:21 | 只看该作者
谢谢各位指点!:D

使用特权

评论回复
18
ayb_ice| | 2010-5-15 12:26 | 只看该作者
应该先写括号,再补代码....

使用特权

评论回复
19
xwj| | 2010-5-15 12:56 | 只看该作者
少了多了括号和分号的话一般的程序编辑器都有明显或不明显的提示的,只要你自己仔细看下界面的就会看到了。
就连Keil都有括号配对指示哦~

使用特权

评论回复
20
wangwo| | 2010-5-15 13:04 | 只看该作者
呵呵,挺热闹的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1254

帖子

4

粉丝