我无法通过以下代码来确定是否存在三元运算符。.plz帮助。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void one();
int main()
{
FILE *fp;
fp=fopen("C:/Users/HP/Documents/NetBeansProjects/CD2/1.txt","r");
char c;
void one()
{
char c;
while((c=fgetc(fp)!=EOF))
{
if(c==':')
{
printf("\nThe ternary operator present");
return;
}
}
}
while((c=fgetc(fp))!=EOF)
{
printf("\n-->%c",c);
if(c=='?')
{
one();
}
}
return 0;
}
我想知道为什么此代码不起作用,并说明文件1.txt中是否存在三元运算符
输出显示所有字符,直到'?'如果我们打印它们,但是为什么找不到冒号':'?
答案 0 :(得分:0)
while
循环的退出条件可能是问题所在。 =
的优先级低于!=
运算符。所以
(c=fgetc(fp)!=EOF)
获得类似的评估
(c= (fgetc(fp)!=EOF) )
有关C中各种运算符的优先级,请参见this。
你可以做
while((c=fgetc(fp))!=EOF)
相反。首先将fgetc()
的返回值分配给c
,然后进行比较。
即变量c
得到比较的结果,这意味着值是0
或1
。
您的程序应同时检查?
和其他操作数。
参见this。
简单的检查可能不足以解决诸如'operator'是字符串之类的情况
char str[]="the ternary operator is ?:";
在这种情况下检查发生情况有点复杂。
编辑:
正如Jens所指出的,fgetc()
返回int
而不是char
。因此,将c
设为int
,而不是char
。
请参阅this帖子。