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

C program to check for presence of ternary operator

我无法通过以下代码查明三元运算符是否存在。请帮助。

#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) )

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

你可以做到

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

相反。先把fgetc()的return值赋给c,然后再做比较。

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

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

对于像 'operator' 这样的字符串的一部分这样的情况,一个简单的检查可能还不够

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

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

编辑: 正如 Jens 指出的那样,fgetc() return 是 int 而不是 char。所以让 c 成为 int 而不是 char.

参见 post。