相关疑难解决方法(0)

getchar/fgetc和putchar/fputc中int和char的区别?

我正在尝试自己学习C,我有点困惑getcharputchar:

1

#include <stdio.h>

int main(void)
{
    char c;
    printf("Enter characters : ");
    while((c = getchar()) != EOF){
      putchar(c);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2

#include <stdio.h>

int main(void)
{
    int c;
    printf("Enter characters : ");
    while((c = getchar()) != EOF){
      putchar(c);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C库函数int putchar(int c)将参数char指定的字符(unsigned char)写入stdout.

C库函数int getchar(void)从stdin获取一个字符(一个unsigned char).这相当于以stdin作为参数的getc.

这是否意味着putchar()同时接受intchar或其中一方以及getchar()我们应该使用一个intchar

c

25
推荐指数
1
解决办法
5595
查看次数

比较unsigned char和EOF

当编译以下代码时,它进入无限循环:

int main()
{
    unsigned char  ch;
    FILE *fp;
    fp = fopen("abc","r");
    if(fp==NULL)
    {
        printf("Unable to Open");
        exit(1);
    }
    while((ch = fgetc(fp))!=EOF)
    printf("%c",ch);
    fclose(fp);
    printf("\n",ch);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc编译器也会在编译时发出警告

abc.c:13:warning: comparison is always true due to limited range of data type
Run Code Online (Sandbox Code Playgroud)

当代码unsigned char被替换为charint按预期时,代码运行正常,即它终止.
但代码也运行unsigned int良好.因为我有我读的EOF就是定义为-1stdio.h那为什么此代码为无符号的字符失败,但运行良好的unsigned int类型.

c comparison eof unsigned-char fgetc

7
推荐指数
2
解决办法
8742
查看次数

标签 统计

c ×2

comparison ×1

eof ×1

fgetc ×1

unsigned-char ×1