用于检查三元运算符是否存在的C程序

时间:2018-07-14 13:38:14

标签: c operator-keyword ternary

我无法通过以下代码来确定是否存在三元运算符。.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中是否存在三元运算符

输出显示所有字符,直到'?'如果我们打印它们,但是为什么找不到冒号':'?

1 个答案:

答案 0 :(得分:0)

while循环的退出条件可能是问题所在。 =的优先级低于!=运算符。所以

(c=fgetc(fp)!=EOF)

获得类似的评估

(c= (fgetc(fp)!=EOF) )

有关C中各种运算符的优先级,请参见this

你可以做

while((c=fgetc(fp))!=EOF)

相反。首先将fgetc()的返回值分配给c,然后进行比较。

即变量c得到比较的结果,这意味着值是01

您的程序应同时检查?和其他操作数。 参见this

简单的检查可能不足以解决诸如'operator'是字符串之类的情况

char str[]="the ternary operator is ?:";

在这种情况下检查发生情况有点复杂。

编辑: 正如Jens所指出的,fgetc()返回int而不是char。因此,将c设为int,而不是char

请参阅this帖子。