相关疑难解决方法(0)

在c中,switch语句可以有2个参数吗?

int main()
{
   switch(1,2)
   {
      case 1:printf("1");break;
      case 2:printf("2");break;
      default: printf("error");break;
   }
}
Run Code Online (Sandbox Code Playgroud)

这在c中有效吗?

我认为它不应该,但是当我编译它时,它显示没有错误并产生输出2.

c syntax comma switch-statement comma-operator

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

这个逗号在for循环的*test*部分中做了什么?

int c = someIntegerValue;

// Some code...

int i;
for ( i = 0; i < 5, i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)

我的编译器说error: expression has no effect,这听起来是正确的.那么,这两个比较中的哪一个将在这里使用?我的猜测是i < c被忽略了,但我想得到其他人的一些确认,因为我还无法运行这段代码......

c for-loop comma-operator

5
推荐指数
2
解决办法
171
查看次数

如果(a,b,c,d)这是如何工作的?

int main(void)
{
  int a=0, b=20;
  char x=1, y=10;
  if(a,b,x,y)
    printf("bye");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述代码中的"if"条件如何工作?"y"的值是否仅被"if"视为?

c if-statement

5
推荐指数
2
解决办法
524
查看次数

为什么这个逗号的使用在表达式中起作用但在声明中失败?

来自高级OOP语言C#和Java,最近开始在C中摸不着头脑.我觉得C有点奇怪,就像有人觉得JS一样.所以想澄清如下:

下面给出了错误,这看起来很直观,因为即使在OOP语言中它看起来也是不正确的语法

int i=0,1,2;  

/*
Error : expected identifier or ‘(’ before numeric constant
 int i = 0, 1, 2;
            ^
*/
Run Code Online (Sandbox Code Playgroud)

但是下面的工作令人惊讶:

int i;
i = 0,1,2;    //works
Run Code Online (Sandbox Code Playgroud)

为什么会这样?保持这种行为或仅仅是一些解析技术问题是否有意义?

c declaration comma-operator

5
推荐指数
2
解决办法
212
查看次数

与逗号在C/C++中的工作方式有些混淆

我已经使用SO一段时间作为参考,但之前从未问过问题.我目前正在大学C++课程中阅读Bjarne Stroutstrup 编程:原理和实践,仅仅是为了我自己的利益,因为我在这里看到了一个真正推荐它的问题的答案.

我们现在正在课堂上覆盖操作员,而我似乎无法理解逗号操作符在语句中的工作方式.一个例子是类的在线部分的示例问题,即使我编写C程序并使用GDB获取结果,我仍然会出错.问题是:

假设在下面的表达式之前x == 16,下面的表达式的值是什么(不一定是x的值)?

x ++,++ x,x + = x

我对正确答案不感兴趣,以至于如何得到正确的答案.我已经阅读了类似问题的几个答案,例如这里的问题,但似乎我错过了当实际上没有分配运算符时这是如何适用的.这跟说的一样吗

int y = (x++, ++x, x+=x);
Run Code Online (Sandbox Code Playgroud)

要么

int y = x++, ++x, x+=x;
Run Code Online (Sandbox Code Playgroud)

还是两个?有人可以解释逗号运算符的工作原理,特别是与没有赋值的语句有关吗?

c c++ comma operator-precedence operator-keyword

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

C函数中逗号分隔的返回参数

在完成C编程测试时,我得到了一个关于函数的预期输出的问题,该函数似乎返回两个值.其结构如下:

int multi_return_args(void)
{
 return (44,66);
}
Run Code Online (Sandbox Code Playgroud)

这个问题让我感到惊讶并且固有地认为如果可能的话,第一个参数将被传递给调用者.

但在编译之后,结果是66.在快速搜索之后,我找不到任何关于构造这样的return语句的内容,所以想知道是否有些人可以帮助我.

为什么它会像这样,为什么?

c comma-operator

5
推荐指数
2
解决办法
1379
查看次数

为什么在这个return语句中使用这个逗号?

我理解这个C++函数的作用,但我不明白为什么return语句是这样编写的:

int intDivide(int num, int denom){
  return assert(denom!=0), num/denom;
}
Run Code Online (Sandbox Code Playgroud)

这里只有一个声明,因为只有一个声明,;但逗号让我困惑.为什么不写:

int intDivide(int num, int denom){
  assert(denom!=0);
  return num/denom;
}
Run Code Online (Sandbox Code Playgroud)

除了"优雅"之外,还有什么东西可以在第一个版本中获得?

无论如何,这个逗号究竟在做什么?它是否将单个陈述分为两部分,以致上述两个版本基本相同?

c++

5
推荐指数
2
解决办法
418
查看次数

Fibonacci序列在python中工作,但不在c中?

我有以下python代码:

a, b = 1, 1
for i in range(0, 100):
    print a
    a, b = b, a + b
Run Code Online (Sandbox Code Playgroud)

它产生了这个:1 1 2 3 5 8等

我在c中写了同样的文章:

#include <stdio.h>
long long unsigned int a = 1, b = 1;
void main(){
    for(int i = 0; i < 100; i++){
        printf("%llu \n", a);
        a = b, b = a + b;
    }
}
Run Code Online (Sandbox Code Playgroud)

它产生了这个:1 1 2 4 8 16 32等

为什么c程序在使用完全相同的操作时会产生2的幂?

c python fibonacci

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

使用printf的双括号时出现分段错误

#include<stdio.h>
#define POOLNAME_FMT "Hello"

void main() {

 printf((POOLNAME_FMT "Cannot allocate %d bytes" POOLNAME_FMT "in pool not enough memory",5));

}
Run Code Online (Sandbox Code Playgroud)

当我使用双括号时,为什么会出现分段错误printf.即printf(( ));

c linux printf segmentation-fault comma-operator

4
推荐指数
2
解决办法
517
查看次数

为了打印"a"的值,内部(a + = 3,5,a)的操作数将如何处理或计算?

代码段是:

int main()
{
     int a = 1, b = 2, c = 3;
     printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)

虽然它在终端中显示8作为输出.但我没有得到它背后的概念.

c undefined-behavior

4
推荐指数
2
解决办法
1265
查看次数