#include<stdio.h>
#define MAX 10000
#define CHECK 1000
#define OPN 1
#define CLS 0
char program[MAX];
void si_qoute (void);
void do_qoute (void);
void getprogram (void);
int main(){
printf ("Type your code\n");
getprogram ();
si_quote ();
do_quote ();
return 0;
}
void si_quote (void){
int opn[CHECK], cls[CHECK], i, lcnt = 0, opn_cnt = 0;
for (i = 0; i < CHECK; i++)
opn[i] = cls[i] = 0;
for (i = 0; program[i] != '\0'; i++){
if (program [i] == '\n')
lcnt++;
if (program[i] == '\''){
opn[opn_cnt] = lcnt;
if (program[i + 1] == '\\' && program[i + 3] =='\''){
cls[opn_cnt++] == lcnt;
i += 3;
}
else if(program[i + 2] == '\''){
cls[opn_cnt++] == lcnt;
i += 2;
}
else
opn_cnt++;
}
}
opn[opn_cnt] = -1;
for(i = 0; opn[i] != -1; i++)
if (opn[i] && cls[i] == 0)
printf ("Single Quote opened at line %d not closed \n", opn[i]);
}
void do_quote (void){
int opn[CHECK], cls[CHECK], i, lcnt = 0, opn_cnt = 0;
for (i = 0; i < CHECK; i++)
opn[i] = cls[i] = 0;
for (i = 0; program[i] != '\0'; i++){
if (program[i] == '\n')
lcnt++;
if (program[i] == '\"'){
opn[opn_cnt] = lcnt;
while (program[++i] != '\"'){
if (program[i] == '\\' && program [i + 1] == '\"')
i++;
else if (program[i] == '\n'){
opn_cnt++;
lcnt++;
break;
}
}
if (program[i] == '\"')
cls[opn_cnt++] = lcnt;
}
}
opn[opn_cnt] = cls[opn_cnt] = -1;
for (i = 0; opn[i] != -1; i++)
if (opn[i] && cls[i] == 0)
printf ("Double inverted quoted opened at %d not closed \n", opn[i]);
}
void getprogram (void){
int i, c;
for (i = 0; i < MAX - 1 && (c = getchar()) != EOF; i++)
program[i] = c;
program[i++] = '\n';
program[i] = '\0';
}
我遇到了错误,该错误指出了两个函数si_quote()
和do_quote()
的隐式声明。我打算做的是从main调用这些函数。据我所知,在调用函数时,我们需要尝试在括号内编写函数名称以及参数列表。但是,由于这些函数不接受任何参数,因此参数列表为空。我认为函数可能会被重新声明为int
作为其返回类型。我不明白这到底是什么问题。如果按照我的猜测重新声明了它,为什么getprogram()
仍然可以正常工作。如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:1)
您将si_quote
放在一个地方,将si_qoute
放在另一个地方。这些不相等。
这种简单的错字使编译器认为您声明(但不使用)两个函数,并使用(但不声明)另外两个完全不相关的函数。