查找C语言中基本语法错误,如小括号,中括号,大括号,单引号,双引号

 

/******************************************************
   KnR 1-24
   --------
   Write a program to check the syntax of a C program
   for matching {} () "" '' []
 

 
******************************************************/
#include <stdio.h>
 
#define MAXLINE 1000 /* max input line size */
char line[MAXLINE]; /*current input line*/
 
int getline(void);  /* taken from the KnR book. */
 
 
int main()
{
  int len=0;//输入的长度
  int t=0;
  int brace=0;//方括号的个数,'['加1,']'减1
  int bracket=0;//大括号的个数,'['加1,']'减1
  int parenthesis=0;//小括号的个数,'['加1,']'减1
  int s_quote=1;//单引号奇偶标志
  int d_quote=1;//双引号奇偶标志
 
  while ((len = getline()) > 0 )
    {
      t=0;
      while(t < len)
        {
          if( line[t] == '[')
            {
              brace++;
            }
          if( line[t] == ']')
            {
              brace--;
            }
      if( line[t] == '{')
            {
              bracket++;
            }
   if( line[t] == '}')
            {
              bracket--;
            }
          if( line[t] == '(')
            {
              parenthesis++;
            }
          if( line[t] == ')')
            {
              parenthesis--;
            }
          if( line[t] == '\'')
            {
              s_quote *= -1;
            }
          if( line[t] == '"')
            {
              d_quote *= -1;
            }
          t++;
        }
    }
  if(d_quote !=1)
    printf ("Mismatching double quote mark\n");
  if(s_quote !=1)
    printf ("Mismatching single quote mark\n");
  if(parenthesis != 0)
    printf ("Mismatching parenthesis\n");
  if(brace != 0)
    printf ("Mismatching brace mark\n");
  if(bracket != 0)
    printf ("Mismatching bracket mark\n");
  if( bracket==0 && brace==0 && parenthesis==0 && s_quote == 1 && d_quote == 1)
        printf ("Syntax appears to be correct.\n");
  return 0;
}
 

int getline(void)
{
  int c, i;
  extern char line[];
 
  for ( i=0;i<MAXLINE-1 && ( c=getchar()) != EOF && c != '\n'; ++i)
    line[i] = c;

  if(c == '\n')
      line[i++] = c;

   line[i] = '\0';
  return i;
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值