我无法通过以下代码找出三元运算符是否存在。请帮忙。
#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 中是否存在三元运算符
输出显示“?”之前的所有字符如果我们打印它们,但为什么它找不到冒号 ':' ?
最佳答案
while
循环的退出条件可能是问题所在。 =
的优先级低于 !=
运算符。所以
(c=fgetc(fp)!=EOF)
评估方式如下
(c= (fgetc(fp)!=EOF) )
参见this C 中各种运算符的优先级。
你可以做
while((c=fgetc(fp))!=EOF)
相反。首先将fgetc()
的返回值赋值给c
,然后进行比较。
即变量c
得到比较结果,这意味着该值要么是0
,要么是1
。
您的程序应该检查 ?
以及其他操作数。
请参阅this .
对于像“运算符”是字符串一部分这样的情况,简单的检查可能不够
char str[]="the ternary operator is ?:";
检查这种情况是否发生有点复杂。
编辑:
如Jens指出,fgetc()
返回一个 int
而不是 char
。因此,将 c
设为 int
而不是 char
。
参见this发布。
关于检查三元运算符是否存在的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51340024/