相关疑难解决方法(0)

需要帮助理解这对C中的循环代码

考虑C中的以下代码:

void main()
{
    int a=0;

    for(printf("\nA"); a; printf("\nB"));

    printf("\nC");
    printf("\nD");     
}
Run Code Online (Sandbox Code Playgroud)

当我使用Turb C++版本3.0和gcc-4.3.4编译它时,我得到以下作为输出的情况:

A
C
D
Run Code Online (Sandbox Code Playgroud)

但是,如果我编译以下代码:

void main()
{
    for(printf("\nA"); 0; printf("\nB"));

    printf("\nC");
    printf("\nD");
}
Run Code Online (Sandbox Code Playgroud)

gcc-4.3.4的输出与前一种情况相同,但turbo c ++ 3.0产生以下输出:

A
B
C
D
Run Code Online (Sandbox Code Playgroud)

首先,我不知道这里发生了什么!另外,为什么gcc编译器的输出对于两个代码都是相同的,但在turboc ++ 3.0编译器的情况下,输出是不同的?有人可以解释一下吗?

编辑:

实际上有人在一家IT公司的采访中被问到这个问题,当他没有给出答案时,面试官给出了这个解释.但我发现这是愚蠢的.你如何要求某人使用"bug",好像它是语言提供的"设施"?因为它被称为"设施"和"技术",无论我们在第二个表达式中传递0作为文字还是在值为0的变量中传递,结果应该是相同的.

我错误地认为面试官非常愚蠢地问这样的问题并且表明他的无能吗?

c

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

这个C语句的顺序是否定义良好?

标题有点模糊,因为我真的不知道如何定义这个问题.

它与以下代码有关:

for (match         = root,
     m_matchBase   = match->requestedBase,
     m_matchLength = match->length;

     match != NULL;

     match         = match->next,
     m_matchBase   = match->requestedBase,
     m_matchLength = match->length)
{
    if (m_matchBase <= m_base && m_matchBase + m_matchLength > m_base)
        break;
    // other stuff...
}
Run Code Online (Sandbox Code Playgroud)

for循环中的语句是否保证按顺序运行?

例如,m_matchBase = match->requestedBase保证运行之后match = match->next

c sequence-points

7
推荐指数
2
解决办法
222
查看次数

如何在C++中构造一个for循环复合?

for循环的计数器部分(第三部分)是否允许另一个for循环?在我试图优雅地编写代码来生成一个直角三角形时,我写了这个,但它不会编译:

#include <stdio.h>
int main()
{   
    int i, j, N = 5;
    for (i = 1;
         i <= N; 
         (for (j = 1; j <= i; j++, printf("%c", '0'));), i++)
       printf("\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda for-loop c++11

7
推荐指数
2
解决办法
1396
查看次数

我们可以无条件地使用循环吗?

我的问题很简单,因此我不会深入研究

我们可以使用for()没有条件的循环吗?

for(;;space+=1)
{
printf("  ");
break;
} 
Run Code Online (Sandbox Code Playgroud)

c for-loop

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

俄罗斯农民增殖

这是我对俄罗斯农民增殖的简短实施.怎么改进?

限制:仅在> 0,b> 0时有效

for(p=0;p+=(a&1)*b,a!=1;a>>=1,b<<=1);
Run Code Online (Sandbox Code Playgroud)

c algorithm optimization multiplication

3
推荐指数
5
解决办法
9828
查看次数

新手:编译时出现C语法错误

    for(int a = 0, b = 1; b < n; a++; b++)
    {
        if (compare(values[a], values[b]))
            counter++;
        else
            {
            int x = values[a];
            values[a] = values[b];
            values[b] = x;
            }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,第一行[for(int ...])出现此错误:

helpers.c:68:41: error: expected ')' before ';' token
Run Code Online (Sandbox Code Playgroud)

为什么我需要添加另一个')'?

c for-loop comma-operator

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