小编RAD*_*GIA的帖子

为什么以下代码中逗号运算符的工作有变化?

考虑以下代码片段Case1:

int main()
{
int a;
a=printf("hello"),printf("joke");
printf("%d",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

案例2:

int main()
{
int a;
a=(printf("hello"),printf("joke"));
printf("%d",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

情形3:

int main()
{
int a;
a=10>8?(printf("hello"),printf("joke")):printf("hello");
printf("%d",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

情形4:

int main()
    {
    int a;
    a=10>8?printf("hello"),printf("joke"):printf("hello");
    printf("%d",a);
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚当我在案例2中使用paranthesis时,然后我将输出作为hellojoke4,而不使用parantheis我得到输出为hellojoke5.

根据输出,当我尝试使用三元运算符时,然后使用paranthesis或不使用paranthesis执行相同的表达式,返回printf语句的最后输出值hellojoke4,那么如何在三元的情况下行为不同运营商.并且paranthesis的存在如何影响逗号的工作,它是作为分隔符还是作为操作符

c comma

5
推荐指数
1
解决办法
87
查看次数

为什么我们不能在switch构造中的case中使用变量?

如果我int a=4在切换情况下有一个整数变量如果我写

int b = something;
...
switch(a) 
{ 
  case 4+b: printf("hii"); 
} 
Run Code Online (Sandbox Code Playgroud)

那么为什么这个语句是一个编译时错误,变量不能在case语句中使用为什么编译器不能代替变量来替换值.

所以基本上它创建的问题是语言开发人员没有将它作为正确的语法包含在内.

c compiler-errors

1
推荐指数
1
解决办法
807
查看次数

为什么注释不能在令牌中使用?

如果我有代码,比如

 int main()
    {
        i/* this is me*/nt a=9;
        printf("%d",a);
        getch();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

这里如果我尝试在令牌int中使用注释,那么它创建了什么问题,因为它显示错误.在词法阶段,编译器出现问题时,词法分析器只是将字符流转换为令牌,并删除它所有评论,那么这里的问题是什么?

c compiler-construction

0
推荐指数
1
解决办法
110
查看次数

fflush(stdin)的工作如何改变下面代码中的输出?

#include <stdio.h>
int main()
{
        int test_no ,count=1,i,n,j;
        scanf("%d",&test_no);
        fflush(stdin);
        int arr1[test_no];
        for(i=0;i<test_no;i++)
        {
                scanf("%d",&n);
                printf("\n");
                int arr[n];
                for(j=0;j<n;j++)
                {
                        fflush(stdin);
                        scanf("%d",&arr[i]);
                }
                for(j=1;j<=n-1;j++)
                {
                        if(arr[j-1]>arr[j])
                        {
                                count++;
                        }
                }
                if(n==1)
                {
                        arr1[i]=1;
                }
                else
                {
                        arr1[i]=count;
                }
                count=1;
        }
        for(i=0;i<test_no;i++)
        {
                printf("%d\n",arr1[i]) ;
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

该解决方案是这一问题.

我没有得到第三种情况所需的输出,它给我的输出为3或4,取决于我放在fflush(stdin)之前scanf("%d",arr[i])或之后scanf("%d",arr[i]),请用这段代码告诉问题.

c fflush

-1
推荐指数
1
解决办法
216
查看次数

为什么下面代码中两个变量的大小不同?

#include<stdio.h>
int main()
{
  short i = 90L;
  long j = 90;
  printf("%d", sizeof(i));
  printf("%d\n", sizeof(j));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我只是读到如果我们把L放在一个整数值的末尾,那么实际上它得到的存储量等于long值,所以基本上他们的意思是说这个,就像我计算两个变量的大小一样,它是不同的,如果它实际上占用了一个长变量的大小,那么显然它会显示大小为4个字节,但它只根据短数据类型的大小显示大小,那么什么是背后的原因.

这个值是否被截断但是当我修改i的值时,它只将它打印为90,所以一切都发生了.

c

-3
推荐指数
1
解决办法
55
查看次数