问题标签 [putchar]
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.
c - 打印EOF的值
在 Kernighan 和 Ritchie(C 编程语言)中:
'编写程序打印 EOF 的值'
我写:
但它不输出任何东西为什么?
c - getchar 缓冲输入、EOF 和终端驱动程序
我试图了解终端驱动程序如何与 getchar 一起工作。以下是我在阅读 KandR 时编写的一些示例代码:
代码 1:
代码 2:
代码 3: //模拟 wc 命令功能的准系统程序
我希望了解终端驱动程序何时将输入字符串真正移交给程序。假设我的输入是字符串“这是一个测试”并且我按下回车键,那么上面提到的代码是这样工作的:
代码1:输出“t”(程序结束)
代码 2:输出“这是一个测试”,跳到下一行(因为它也输出我按下的输入)并再次等待输入。
代码 3:不为上述字符串输出任何内容,然后回车。我需要按 Ctrl+D 才能显示输出(输出为 15 4 3 1)
1) 为什么在代码 3 的情况下我需要显式按 Ctrl+D (EOF) 才能将输入发送到我的程序?换句话说,为什么我的输入字符串在我按下回车后在代码 1 和代码 2 的情况下被发送到我的程序?为什么它也不要求EOF?
2)另外,在代码 3 的情况下,如果我在输入字符串后不按 enter,我需要按 Ctrl+D 两次才能显示输出。为什么会这样?
编辑:
对于另一个输入说“TESTING^D”,上面的代码是这样工作的:
1) 输出“T”并结束
2) 输出“TESTING”并等待更多输入
3) 在按下另一个 Ctrl+D 之前不输出任何内容。然后它输出 7 1 0 0。
在此输入的情况下,终端驱动程序在代码 1 和代码 2 的情况下收到 Ctrl+D 时将输入字符串发送给程序。这是否意味着 /n 和 Ctrl+D 的处理方式相同,即它们都用作终端驱动程序将输入发送到程序的标记?那么为什么我需要在第二种情况下按两次 Ctrl+D 呢?
这个http://en.wikipedia.org/wiki/End-of-file说驱动程序在换行时将 Ctrl+D 转换为 EOF。但是在我的“TESTING^D”输入的情况下,即使 ^D 与输入的其余部分在同一行上,它也可以正常工作。对此有什么可能的解释?
c - getchar 和 putchar 的实际用途是什么?
这些功能的实际用途是什么?我的意思是,如果我们使用 while 循环使用它们,并且EOF
如果我们提供输入,我们会得到我们输入"hello"
的内容,我们将得到输出为"hello"
. 那么有什么意义呢?
c - 在 C 中运行 putchar() 函数时,“输入”输入如何工作?
我测试了这段代码:
问题:
当我输入一行字符,然后输入一个“回车”时,我得到了这样的结果:
当我直接在一行字符后面添加一个 EOF(ctrl+d) 时,我直接在输入后面得到了结果,例如:
我的问题是“输入”是否触发了代码运行?为什么当我输入 EOF 时,不需要“输入”来输出结果?为什么我需要另一个 EOF 才能退出运行?
非常感谢。
c - 简单putchar程序报错,使用eclipse IDE
我是新来的。在下面的程序中,即使它有效,我也会收到一条错误消息 - 无法打开输出文件 putchar.exe:权限被拒绝。我尝试调试,这就是我得到的 - $1 = 0xff 目标字节序是自动设置的(当前是小字节序)[新线程 7868.0x1f3c]
我不知道调试信息是什么意思......任何帮助将不胜感激。谢谢!
c - 复制用户的输入并将其放在屏幕上
我一直在阅读 Brian W. Kernighan 和 Dennis M. Ritchie 的 The C Programming Language 并且在字符输入和输出方面,特别是在文件复制方面。书中的例子
完美运行。
但我决定自己动手改写一下:
编译执行后,我的代码的结果是:
输入应该是:
另外,我在理解 EOF 时遇到了一点问题。如果有人可以帮助我解决这些问题,那就太好了。
谢谢!
c - 如何防止 gcc -O2 优化 putchar?
我有一个使用自定义 putchar() 的应用程序;到目前为止,它一直运行良好。我将应用程序的优化级别提高到 -O2,现在我的 putchar 没有使用。我已经使用了-fno-builtin,并且基于一些谷歌搜索,我将-fno-builtin-putchar添加到了我的 CFLAGS 中,但这没关系。有没有一种“正确”的方法来解决这个问题,还是我必须进入我的代码并添加类似的东西
能够使用 -O2 并且仍然引入我自己的 putchar() 函数?
编辑—— 自从我最初发表这个问题以来,我偶然发现了-fno-builtin-functions=putchar,这是另一个 gcc 命令行选项。这和上面的都被 gcc 接受,但似乎没有任何明显的效果。
编辑更多 ——进一步试验我看到 gcc 也吞下了-fno-builtin-yadayada,所以显然在 gcc 前端解析的选项只是将第二个破折号后的文本传递到忽略它的较低级别。
更多细节: 三个文件 try1.c、try2.c 和 makefile...
尝试1.c:
尝试2.c:
生成文件:
这是输出: 请注意,没有优化它使用我提供的 putchar;但是使用 -O2 它可以从其他一些“神奇”的地方获得它......
c - C - 使用 getchar 和 putchar 交换字符
这是做作业的。只能使用 getchar 和 putchar
我需要使用 getchar 和 putchar 交换字符。例如巴黎 APIRS
它可以工作,但是当我偶数个字母 4,6,8... 时,我需要按两次 ENTER 键。我如何消除这种行为?有什么方法可以杀死 \n 以获得 getchar
byte - C++ 输出字节说明
来自教科书:
所以我知道一个字节有 8 位,右位移向左边添加零位,并从右边弹出位。但是如何使用上面的例子来输出一个字节呢?我本来期望:
因为我假设 putchar 输出弹出的位?
c - putc 和 putchar 的性能?
我一直认为多次调用 putc 比 puts 或 printf 快。以打印“hello”为例,在实际程序中我总是使用puts或printf,但现在我正在编写一个生成C代码的程序,所以我想知道是否要生成代码,putchar('h'); putchar('e') ...
因为我首先认为它应该更多快点。但是我进行了一个测试,结果非常有趣。编译器是 GCC。
未经优化的结果:
4.247 1.013 1.195
优化结果(-O2):
0.910 1.184 1.315
优化结果(-O3):
0.920 1.158 1.311
因此,在没有优化的情况下天真地执行时,多次调用 putc 比 printf 的 puts 慢。首先,我很好奇为什么会这样。其次,对于程序生成的 C 代码,我应该遵循哪种方式?