问题标签 [fgetc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2343 浏览

c - 如何从C中的文件中读取两个连续的字符?

我有以下代码,我想为简单的计算器语言创建一个简单的扫描仪。我正在使用 fgetc 从文件中获取字符。不过,在某些地方,我还需要检查后面的下一个字符。出于这个原因,我一直在使用 ++ 运算符,但它似乎无法正常工作。有人可以帮我解决我的问题。

例如,当我的文本文件中有 := 时,它会打印冒号,然后显示一条错误消息:“; cannot follow : (colon).”,而它应该打印“assign”。

这是我的完整代码:

0 投票
2 回答
5370 浏览

c - 使用 STDIN 在 fgetc() 缓冲区中找不到 EOF

编辑
问题的解决方案是了解 Ctrl-D 实际在做什么。
在新的空行上,单个 Ctrl-D 将发出 EOF 信号。
但如果该行中已有字符,则第一个 Ctrl-D 会使该行的内容回显到屏幕(但不写入STDOUT)。如果字符已经在缓冲区中,则必须向 发出第二个 Ctrl-D 信号EOF,从而将缓冲区写入STDOUT
这可以通过将输出重定向到文件来证明。
编辑

我正在使用 fgetc() 从stdin. 我循环直到收到 EOF。在循环中,我根据在按下 Ctrl-D 之前键入的字符构建一个字符串。但我无法找出退出循环的方法,因为从中读取的缓冲区 ch = fgetc() 不包含 EOF。(EOF 只触发 fgetc() 返回它的第一个值。)

ungetc() 不允许将 EOF 推入缓冲区,推入任何其他字符都有与真实数据混淆的风险,我被卡住了!我已经阅读了很多答案,但它们没有解决这个问题或不适用于我试图实现的用例。

我希望能够在标准输入缓冲区上计数、窥视等。

我真的不想读一整行(或一次 X 个字符),因为我正在处理从 fgetc()到达(编辑)的每个字符。

关于如何克服这一困境的任何建议?(不使用 NCurses)

我正在使用 Ubuntu。EOF = Ctrl-D 这是我正在使用的一些代码:

这有效,并且与乔纳森的简单示例相同,但不是我想要的:

但是,这被卡住了,但正在尝试做我想做的事情(编辑),但需要 Ctrl-D 第二次:

还有一些被问到的代码:

下面的这个版本会逐个字符地处理输入的字符,并且工作起来就像cat. 但我决定先将每个字符处理成一行,然后再应用一些我需要实现的额外转换。这简化了状态机设计,但尝试构建线条可能不是一个好的选择(不使用 NCurses)。:(

0 投票
1 回答
1482 浏览

c - 使用 fgetc C 读取文件时出现问题

所以我正在用 C 编写一个并行数独解决方案检查器,但我似乎遇到了读取普通旧 .txt 文件的问题。

这是要在文件中读取的代码:

.txt 文件如下:

当我打印 c - 48 时,我得到了预期值;当我在循环内打印拼图[i][j] 时,我再次得到正常值。但是,当我之后查看我的拼图数组时,每个值都设置为 9;对于我的一生,我无法弄清楚为什么。是否存在我不知道的内存/范围问题?

0 投票
1 回答
442 浏览

c - c 的 fgetc 起点

所以我目前的代码出现分段错误,并试图缩小它可能是什么。我不确定fgetc函数的起点是否与fprintfand的定位相同scanf

即,如果我scanf在一个文件上使用过,然后使用fgetc它会从一开始就开始,还是会从scanf中断的地方继续?如果是前者,我将如何操纵起点?

输入文件:

0 投票
1 回答
140 浏览

stdin - scanf %c 和 fgetc(stdin) 影响

我对几乎相同的两段代码有疑问,但我不知道为什么它们的行为不同。

这是第一个:

这是第二个:

在第一种情况下,程序最后仍然等待输出。

在第二个中,程序跳过了第二个 scanf 指令。

这对我来说似乎很不清楚。你能帮我吗 ?

提前致谢。

0 投票
1 回答
185 浏览

c++ - C++ 用 fgets 读取另一行

我正在为任天堂 ds 编写 c++ 代码,并且必须使用“FILE”类型来访问文本文件。所以我正在使用 fgets 来查看文本文件的内容,但除了第一行之外,我看不到任何查看文档内容的方法。

是否有另一个命令可以做这样的事情,或者有没有办法让 fgets 读取不同的行?

0 投票
2 回答
421 浏览

c - 使用 fgetc() 从文件读取时出现奇怪的结束值

fgetc()用来从仅包含数字的文件中读取字符。然后我将字符转换为 int 并打印出来。没关系。但是在打印出所有数字之后,最后我得到了-38-49值。我用谷歌搜索了它,但那里没有任何关于它的信息。在输入文件中,我有以下内容:0105243100000002200000010001318123 outpuf 是这样的:0105243100000002200000010001318123-38-49 我的代码:

0 投票
1 回答
28 浏览

linux - 如何安全简单地从文件或标准输入中读取一行文本?

鉴于 fgets 有时仅包含换行符,并且 fscanf 本质上是不安全的,我想要一个简单的替代方法来逐行读取文件中的文本。这个页面是找到这样一个功能的好地方吗?

0 投票
4 回答
196883 浏览

c++ - 按字符读取字符串直到行尾 C/​​C++

如何一次读取一个字符的字符串,并在到达行尾时停止?我正在使用 fgetc 函数从文件中读取并将字符放入数组(后者会将数组更改为 malloc),但无法弄清楚当到达行尾时如何停止

试过这个(c是文件中带有char的变量):

但它给出了错误,我无法将指针与整数进行比较

文件看起来像(单词的长度未知):

那么问题来了:1)我可以将 c 与 \0 进行比较,因为 \0 是两个符号(\ 和 0)还是算作一个(与 \n 相同的问题)2)也许我应该使用 \n ?3)如果上面的建议是错误的,你会建议什么(注意我当时必须阅读字符串一个字符)

(注意我对 C++ 很陌生(并且自己编程))

0 投票
0 回答
120 浏览

c - 奇怪的分段错误

我编写了一个运行良好且没有任何错误的程序。我读取一个文本文件并将内容写入一个数组(逐行并在这一行中逐个分隔字符串)。然后我添加了第二个文本文件并再次尝试读取内容,但随后我遇到了一些疯狂的分段错误,这些错误仅在我调试程序时才报告。

这是导致错误的程序部分:

第一件事是当我尝试分配缓冲区时出现分段错误char *buffervr = (char *)malloc(size);。当我在分配数组之前执行此操作时,float taz[5000], tel[5000], ttime[5000], tvr[5000][nbins], tdbz[5000][nbins];它可以工作吗?!

第二件事是我无法读取文件, c = fgetc(vrFile);尽管我可以打开它。在这里我得到另一个分段错误?!

有人可以告诉我出错了吗?

谢谢!

编辑:实际代码:

注意:time、lat、lon、az、el 和 vr 是指针。

编辑:我以这种方式解决了我的问题:

vrFile = fopen("file.txt","r");