gpt4 book ai didi

c - 使用 getc 和 putc 打印文件内容

转载 作者:行者123 更新时间:2023-11-30 19:18:34 25 4
gpt4 key购买 nike

我看到以前有人问过这个问题,但似乎没有一个答案能解决我的问题。

我正在尝试编写一个函数来读取文件的内容并打印它们。这是我的代码;

int main()
{
int c;
fseek(stdin, 0, SEEK_SET);
c = getc(stdin);

while ((c = getchar()) != EOF)
{
putchar(c);
fseek(stdin, 1, SEEK_CUR);
c = getc(stdin);
}
}

运行代码时,我使用管道输入文件;

./[Program] < [File.txt]

例如。

./FileRead < Hello.txt

但是,当我运行它时,我收到一堆随机字母。这是一个例子:

我正在输入的文件的内容:

Hello World!

This is a test file.

I hope this works!

这是输出:

eood

Tss sfe

Io iwk

谁能帮我找出问题所在吗?

最佳答案

需要注意的是,getc() 函数在读取一个字符后会自动将事件文件指针移动到下一个位置,因此

//fseek(stdin, 0, SEEK_SET);  

打开文件并将指针设置在第一个字符

//c = getc(stdin);           

的 //getc()获取“H”行中的下一个字符并移动指针向前移动一个字符c 现在 == 'H'

 while ((c = getchar()) != EOF)

//getchar() 

接缝正常工作(不推荐)从文件读取时尝试使用

//getc(<filepointer>)

c 现在 == 'e' 并且文件指针被移动到第一个“l”。

那么你就有了

//putchar(c) 

打印“e”字符

 //fseek(stdin, 1, SEEK_CUR);    

将 *fp 向前移动一个字符到第二个“l”

那么你就有了 //c = getc(stdin);
读取行中的下一个字符,即第二个“l”,将 *fp 移动到 ' ' 空格,然后重复。

基本上将代码更改为:

 while ((ch = getch(stdin)) != EOF)
{
putchar(c);

}

代码应该可以正常工作。

注意:对于以文本模式打开的流,fseek 和 _fseeki64 的用途有限,因为回车换行转换可能会导致 fseek 和 _fseeki64 产生意外结果。保证在以文本模式打开的流上工作的唯一 fseek 和 _fseeki64 操作是:

•以相对于任何原始值的 0 偏移量进行查找。

•使用 fseek 时使用 fseek 或 _ftelli64 时使用 _fseeki64 时通过调用 ftell 返回的偏移值从文件开头查找。

关于c - 使用 getc 和 putc 打印文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com