如何检查一个字符是EOF还是

问题描述 投票:0回答:1

我想检查一下该段落中有多少个句子,该句子的定义为

  1. 以“.”结尾的句子有两个空格,例如

    a.  

  2. 以“.”结尾的句子和 。比如

    a.\n

  3. 以“.”结尾的句子与 EOF。比如

    a.EOF

我的做法如下

我尝试使用

strncmp(&s,"\n",1)==0
strncmp(&s,"\0",1)==0
来检查 和 EOF

但是,它未能检查 和 EOF

如何检查一个字符是EOF还是 用C语言写的?

int main(){
    char s;
    int count=0;
    while(scanf("%c", &s) != EOF){
        if(strncmp(&s,".",1)==0){
            scanf("%c", &s);
            if(strncmp(&s,"\n",1)==0){
                count++;
            }
            else if(strncmp(&s,"\0",1)==0){
                count++;
                printf("%d", count);
                return 0;
            }
            else if(strncmp(&s," ",1)==0){
                scanf("%c", &s);
                if(strncmp(&s," ",1)==0){
                    count++;
                }
            }
        }
    }
    printf("%d", count);
    return 0;
}
c string char
1个回答
1
投票
  • EOF
    属于
    int
    类型,因此您无法可靠地检查
    char
    是否为
    EOF
    ,因为该值可能超出范围。
  • char
    具有实现定义的符号性,并且
    EOF
    通常被定义为负数,因此
    char
    很可能永远无法仅因为这个原因而保存
    EOF
    char默认是有符号还是无符号?
  • 这就是为什么像
    getchar
    这样的函数实际上并没有得到
    char
    ,而是得到
    int
    。是的,这是一些严重腐烂的 API,但自 20 世纪 70 年代初以来,这些功能就一直如此。
© www.soinside.com 2019 - 2024. All rights reserved.