【问题标题】:how to use the return type of "fgetc" blow the code?如何使用“fgetc”的返回类型来破坏代码?
【发布时间】:2021-10-21 06:43:27
【问题描述】:
#include <stdio.h>

int main ()
{
   FILE *fp;
   int c;

   fp = fopen("file.txt","r");
   while(1)
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
          break ;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);
}

在代码中,fgetc(fp) 使用 int 作为返回类型,所以为什么我们使用 "printf("%c",c);"而不是 "print("%d",c);"

【问题讨论】:

  • 如果你想查看c的整数表示,你可以使用%d
  • cprogramming.com/tutorial/printf-format-strings.html 是否充分解释了事情? % 代码不代表确切的数据类型;它们代表解释信息的方式(恰好对所提供的数据有一些粗略的期望)。
  • 与问题无关,但您一定要检查来自fopen() 的返回,然后再转到while(1)
  • 有点相关:fgetc 返回 int 而不是您可能期望的 char 的原因是返回值必须能够代表每个可能的 char 值作为特殊值EOF 表示失败。

标签: c fgetc


【解决方案1】:

printf 格式字符串中,%c 的意思是“将int 参数转换为unsigned char 并打印它是代码的字符。”

%d 表示“将int 参数转换为十进制数字并打印该数字。”

【讨论】:

  • 这个答案绝对是我想要的
  • 另外值得注意的是:对于可变参数函数,所有小于int 的整数类型都会被提升为它。 double 也是如此。
  • @bruceherring 如果这回答了您的问题,请考虑按左侧的复选标记将您的问题标记为已解决。
  • @HolyBlackCat 好的,我有点晚了
【解决方案2】:

%c 会将其打印为character

%d 会将其打印为十进制表示。

例子:

void printAsChar(const char *x)
{
    while(*x)
    {
        printf("%c\n", *x++);
    }
}

void printAsDecimal(const char *x)
{
    while(*x)
    {
        printf("%d\n", *x++);
    }
}


int main(void)
{
    printAsChar("hello");
    printf("------------\n");
    printAsDecimal("hello");
}

https://godbolt.org/z/rx8oqaMnT

结果:

h
e
l
l
o
------------
104
101
108
108
111

104'h'101'e'等的ASCII码

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多