问题标签 [getchar]

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 投票
1 回答
1963 浏览

c - 在 C 中使用 EOF 和 getchar() 进行字符计数

可能重复:
为什么 getchar() 不能在 Windows 控制台中将返回识别为 EOF?

我是 C 的新手,想弄清楚 EOF 和 getChar() 是如何工作的。

当我键入一些随机字符时,程序什么也不做,我认为它永远不会退出那个 while 循环。这是为什么?我在 Windows 7 上使用 CodeBlocks。

0 投票
5 回答
4285 浏览

c - 取消 getchar()

我有一个进行大量处理的小程序。您可以通过按回车键来打印进度。

我实现这一点的方法是在主线程中完成处理,同时我有一个 pthread 在 getchar() 上不断循环以等待输入键。

问题是当我完成处理时。发生这种情况时,主线程完成,但仍等待按 enter,因为 getchar() 被阻塞。

如何“取消”getchar()?

0 投票
2 回答
848 浏览

c - 在 Ubuntu 中无法使用 getchar 打印字符数

我是 C 和 Ubuntu 的新手。我编写了一个非常简单的程序来计算使用while和的字符数getchar()。该程序是:

我保存它并使用gcc c1.c -o c1. 没有报告错误。我使用./c1. 我将输入输入为daniweb,然后按 Enter,但显示计数。什么地方出了错?是无限循环吗?如何getchar()确定EOF何时从键盘输入?

0 投票
4 回答
400 浏览

c - 将文本中的空格限制为一个 - c

我正在阅读 K&R,问题是:编写一个程序以将其输入复制到其输出,将一个或多个空格的每个字符串替换为一个空格。在我的脑海中,我想我知道我需要做什么,设置一个布尔值来知道我何时在空间中。我已经尝试过了,但没有成功。我找到了这段代码并且它有效,我正在努力弄清楚是什么阻止了空间被写入。我想我可能有它,但我需要澄清。

我创建了一个文本文件来处理,文本内容如下:

在 'this' 上的 's' 之后,状态变为 1,因为我们在一个空间中。该空间被写入并读取下一个空间。所以现在我们输入:

但是 inspace 不是 0,而是 1。那么会发生什么?代码是否跳过返回 0;,不写任何东西,只是继续 while 循环?返回0;在循环之外,但这是我可以看到没有返回值的唯一方法。

0 投票
2 回答
358 浏览

c++ - debian linux c++ 如何制作按键刹车无限循环

当我按下键盘上的“q”键时,我想要一个无限循环中断。我没有意识到的问题:标准 getchar 等待用户输入并按下回车键,从而停止执行循环。

我解决了“输入”问题,但循环仍然停止并等待输入。

这是我的代码:

0 投票
2 回答
250 浏览

newline - 将返回/输入捕获为按键以退出程序

该程序读入一个文件,然后要求用户输入要显示的行数。显示行数后,将再次提示用户打印更多行或按回车键退出。

我很难通过捕获换行符和/或回车来退出。如果按下返回按钮,我的程序不会退出,但如果我输入 ascii 值(10 是换行的十进制),我的程序不会退出

我希望程序在按下 enter 时退出。

0 投票
1 回答
143 浏览

c - 没有来自 read() 的输出合并到 getchar

几个小时前,我问了一个关于这段代码的理论方面的问题。现在我明白了一切,但是,该代码根本没有输出。这是http://ideone.com/LWMC5上代码的链接

代码:

我应该做什么/添加来产生输出?

0 投票
3 回答
173 浏览

c - 空字符之前的这些附加字符是什么?

我正在关注 Kernighan 和 Ritchie 的 C 书,但在处理字符串时遇到了一些困难。

在下面的代码中,似乎我的字符串虽然是从用户输入的,但在 null ( ) 字符getchar()之前包含额外的,我想说的是垃圾字符。\0

这是代码:

这是一个一个显示字符数组的每个元素的输出。这意味着以下内容:

Array_element: (ascii_number) = ascii_character

你看到元素 12 和 13 了吗?(元素 14 可能是空字符\0)。威士忌酒。探戈。狐步舞。

这是真正的关键,如果我将字符数组定义为只有100 个元素,而不是 200 个,那么输出是合理的。例如,如果我简单地替换

char s[200]char s[100]

那么输出如下:

(我仍然不确定换行符在哪里。那不是 ascii 字符#10吗?)

再次,威士忌探戈狐步舞。

这里发生了什么?

更新

因此,根据下面的答案,当我将字符数组的大小设置为 100 或 200 个元素时,输出的差异似乎真的是巧合——我只是在未初始化的内存中处理垃圾/噪声。

\0正如答案敏锐地表明的那样,我需要明确地终止我的数组。

0 投票
3 回答
507 浏览

c - C 编程 - K&R 示例 1.5.2 - 修改后的程序未按预期运行

我的问题只是“为什么我在第 10 行和第 11 行的代码不能正常运行?” 我的代码的预期目的是完全按照原始 K&R 代码的意图执行,但不计算 nc 任何时候 (getchar() == '\n') 请您赐教?

稍作修改的 K&R 代码:

我使用 64 位 Windows 7、CodeBlocks10.05、GNU GCC 编译器。

我目前的进展和理解:

在示例运行中,我输入单词two并按 Enter,这等于 4 个输入,然后按 ctrl+Z 输入一个^Z或 EOF 字符。然后程序打印1. 我期待它打印3。我想唯一合乎逻辑的解释是它的行为与我的意图完全相反(它只计算换行符?)。事实证明,如果我输入单词two并按回车键,让我们说 4 次,它会打印4. 它似乎在计算nc输入的每个换行符,但是如果我单独按 Enter(在这种情况下为 4 次)然后按 EOF,它总是会打印0. 经过进一步的实验,在某些人看来,看不见的 4 可能是这个程序的一个神奇数字。如果我启动它并准确地按回车键(一个可被 4 整除的数字)然后 EOF 它会打印0. 但是,如果我按其他次数输入,EOF 什么都不做,我必须输入^Z两行,一个接一个,才能正确结束 while 循环,然后打印1。这让我大吃一惊!

0 投票
2 回答
213 浏览

c - 按 home 或 end 时从 getchar 获取大写 O

我在我的 C 代码中使用它:

这是家庭作业的一部分,但这个特定的部分是我正在做的超出作业要求的事情。

我们正在实现一个 shell,我们已经得到了一堆代码来开始。该代码不使用 ncurses(如果可以的话,我会使用它)并且更改它需要重写大量提供的代码。

当我按我的HOMEorEND键时,我得到一个大写 O(在 Open 中是一个 o),然后是HOMEandEND键。我是getchar()用来获取角色的。

似乎只有这两个键可以做到这一点,但我不确定。stdout如果提供的系统函数调用是唯一不同的东西(我们也设置为非阻塞,但这不重要),我不是 100% 。

我真的很困惑,我想实现 END 和 HOME 键,因为我经常使用它们。

如果这不是很多信息,我很抱歉。我不太了解,system无法真正理解 -echo 和 -icanon 对 stty 的影响。我已经查看了手册页,但我仍然无法弄清楚。

编辑

从亚历克斯布朗的回答中,我确认我得到了转义字符。我有类似以下的内容(在错误的伪代码中):

所以它从转义序列中打印出 O ,而不是 [ (我有0x48forHOME0x46for END)。仍然为如何获得真正的密钥代码感到困惑......