有两个类似的程序只改变clrscr(),
的位置;一个将显示错误,其他将执行而没有任何错误。
例如,执行:
void main()
{
int a,b,c;
clrscr(),
printf("Enter the numbers");
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c)
getch();
}
但是这个程序有一个错误:
void main()
{
clrscr(),
int a,b,c;
printf("Enter the numbers");
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c)
getch();
}
为什么?
答案 0 :(得分:1)
你正在使用(也许是滥用,因为你可能不应该像你一样使用它)comma operator。
该逗号运算符是二进制运算符,用于处理两个表达式(左右操作数)。 !它首先计算其左操作数(仅用于副作用),然后是右操作数(这是逗号操作符应用程序的结果)。
在您的代码中(您的2 nd 示例),您在逗号右侧(clrscr()
之后)没有表达式,而是声明。所以这是一个语法错误。
当然你的上一个printf
没有分号。我想这是一个错字。
养成阅读文档的习惯(特别是printf,但也是clrscr
非标准的文档);编译所有警告和调试信息(例如gcc -Wall -Wextra -g
与GCC)。
当然,您的main
是错误的。它应该返回int
。查看一些reference网站,然后查看C11标准,例如: n1570(草案几乎与标准相同)。
答案 1 :(得分:0)
首先在定义"之后没有任何"声明
它有一个语句,用于计算clrscr(),忽略返回值,计算printf()并以不同的方式忽略该返回值。
第二个程序的变量定义太迟了,而且最重要的是预期表达式。
void main()
{
int a,b,c; /* define vars, fine */
clrscr(), /* evaluate clrscr(), then ignore the return value ... */
/* expect another expression,
the value of which to be the total result of the "," operator */
printf("Enter the numbers"); /* there is an expression, fine */
/* the total result gets ignored, also fine */
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c); /* added ";" */
getch();
}
void main()
{
clrscr(), /* code before variable definition, fishy */
/* expecting an expression ... */
int a,b,c; /* no expression fishy,
a variable definition - too late, fishy */
/* statement/definition above terminated with ";", fine,
if not for all the fishy stuff before. */
printf("Enter the numbers");
scanf("%d %d",&a,&b);
c=a+b;
printf("%d",c) /* missing ";" probably irrelevant */
getch();
}