如何让fgetc打印循环内文件的所有字符

use*_*774 3 c fgetc

我正在玩fgetc并且想知道如何让我的循环打印出行部分然后打印前16个字符.

这是我的代码:

int main(int argc, char * argv[])
{
    FILE *fp;

    if((fp = fopen(argv[1], "rb+")) == '\0')
    {
        perror("fopen");
        return 0;
    }

    getchar(fp);

    return 0;
}

void getchar(FILE *fp)
{
    int c;
    size_t linecount = 0;

    while((c = fgetc(fp)) != EOF)
    {
        printf("line : ");
        printf("%c ", c);
        linecount++;

        if(linecount == 16)
        {
            printf("\n");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我的输出是这样的:

 line: ? 5 d s d a d 0 0 0 0 0 0 0 0 0 0 0
 line: a d s x c v d 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我尝试使用for for循环打印字符:

for(i = 0; i < 16; i++)
{
   printf("%c ", c);
}
Run Code Online (Sandbox Code Playgroud)

但是这并没有得到其他角色,因为循环仍然集中在第一个角色上

caf*_*caf 6

首先,已经getchar()定义了一个标准函数<stdio.h>- 您必须更改函数的名称,否则您可能会遇到一些非常奇怪的行为.

其次,在我看来,你想要做的是:

  • 打印出来"line: ";
  • 读取一个字符并打印出来,直到文件结尾或打印出16个字符;
  • 打印出来"\n".

这将转换为代码形式:

printf("line : ");

while (linecount < 16 && (c = fgetc(fp)) != EOF)
{
    printf("%c ", c);
    linecount++;
}

printf("\n");
Run Code Online (Sandbox Code Playgroud)

  • 如果每行末尾的多余空格字符是不合需要的,可以更改为在循环中打印""line:"`然后再显示"%c". (2认同)