hac*_*cks 22 c operators logical-operators
我试图计算两个整数的最大公分母.
C代码:
#include <stdio.h>
int gcd(int x, int y);
int main()
{
int m,n,temp;
printf("Enter two integers: \n");
scanf("%d%d",&m,&n);
printf("GCD of %d & %d is = %d",m,n,gcd(m,n));
return 0;
}
int gcd(int x, int y)
{
int i,j,temp1,temp2;
for(i =1; i <= (x<y ? x:y); i++)
{
temp1 = x%i;
temp2 = y%i;
if(temp1 ==0 and temp2 == 0)
j = i;
}
return j;
}
Run Code Online (Sandbox Code Playgroud)
在if语句中,请注意逻辑运算符.它and不是&&(错误地).代码工作时没有任何警告或错误.
andC中是否有运营商?我正在使用 orwellDev-C++ 5.4.2(在c99模式下).
Sha*_*our 23
&&并且and是替代令牌和在功能上是相同的,从部分2.6替代令牌从C++标准草案:
Alternative Primary
and &&
Run Code Online (Sandbox Code Playgroud)
是表2中的条目之一- 替代标记,它在第2小节中说明:
在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同.表2中定义了替代令牌集.
正如Potatoswatter指出的那样,使用and很可能会使大多数人感到困惑,因此坚持下去可能会更好&&.
重要的是要注意,在Visual Studio C++中不是抱怨并且显然不打算.
编辑
我正在添加一个C特定的答案,因为这最初是对C++问题的答案,但已合并我在C99草案标准中添加相关引用,这是第7.9<iso646.h>节.备选拼写第1段说:
标题定义了以下十一个宏(在左侧),它们扩展为相应的标记(在右侧):
并包括这一行以及其他几行:
and &&
Run Code Online (Sandbox Code Playgroud)
我们也可以在这里找到一个很好的参考.
更新
查看您的最新代码更新,我不确定您是否真的在C模式下编译,OrwellDev 5.4.2 的发行说明说它正在使用GCC 4.7.2.我无法将其构建到C语言模式gcc-4.7或gcc-4.8使用-x cC语言模式,请参阅此处的实时代码.虽然如果你评论该gcc行并使用g++它构建好.gcc如果取消注释,它也可以构建好#include <iso646.h>
and只是一个替代的标记&&.
我们可以在这里轻松引用标准:
2.6替代令牌[lex.digraph]
在语言的所有方面,除了拼写之外,每个备选令牌的行为分别与其主令牌相同.表2中定义了替代令牌集.
在表2中:
Run Code Online (Sandbox Code Playgroud)Alternative | Primary and | &&
但我建议你使用&&.习惯于C/C++的人可能会被and...... 弄糊涂
既然它现在合并了,我们也在谈论C,你可以查看这个页面ciso646定义替代标记.
此标头定义了11个宏常量,其中包含ISO646标准字符集不支持的C++运算符的替代拼写.
从C99标准草案:
7.9替代拼写
<iso646.h>标题定义了以下十一个宏(在左侧),它们扩展到相应的标记(在右侧):
Run Code Online (Sandbox Code Playgroud)and &&
基本上and只是文字版&&的Ç.但你确实需要 #include <iso646.h>.或者它不会编译.
你可以在这里阅读更多:http:
//msdn.microsoft.com/en-us/library/c6s3h5a7%28v=vs.80%29.aspx