具有相同clrscr()的程序如何,即使用逗号运算符的clrscr命令

时间:2018-03-27 16:07:28

标签: c

有两个类似的程序只改变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();
   }

为什么?

2 个答案:

答案 0 :(得分:1)

你正在使用(也许是滥用,因为你可能不应该像你一样使用它)comma operator

该逗号运算符是二进制运算符,用于处理两个表达式(左右操作数)。 !它首先计算其左操作数(仅用于副作用),然后是右操作数(这是逗号操作符应用程序的结果)。

在您的代码中(您的2 nd 示例),您在逗号右侧(clrscr()之后)没有表达式,而是声明。所以这是一个语法错误。

当然你的上一个printf没有分号。我想这是一个错字。

养成阅读文档的习惯(特别是printf,但也是clrscr非标准的文档);编译所有警告和调试信息(例如gcc -Wall -Wextra -gGCC)。

当然,您的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();
   }