- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 C: 编写了这个函数
int process_list(node_t *head){
char c;
node_t *prev = head; /* Define pointer to point the previous node */
head->next = NULL;
head->data = getchar(); /* Insert the first char to the head's data property */
if ( head->data == EOF ) {
return head;
}
while ( (c = getchar()) != EOF ) {
node_t *current = (node_t *) malloc(sizeof(node_t));
current->data = c;
current->next = NULL;
prev->next = current;
prev = current;
}
print_list(head);
return 1;
}
我想检查程序,所以为了模拟 EOF,我被告知我需要使用 ^D (ctrl+D)。但是,当我使用它时,它只是停止程序,并且我看不到 print_list
应显示的输入。结果是:
但是想要的结果(我通过替换 '\n' 中的 EOF 来模拟它,然后按 Enter 键):
函数print_list
:
void print_list(node_t *head) {
node_t * current = head;
printf("The input is:\n");
while ( current != NULL ) {
printf("%c", current->data);
current = current->next;
}
printf("\n");
free_list(head);
}
知道为什么 EOF 终止程序吗?提前致谢!
最佳答案
while ( (c = getchar()) != EOF )
循环不正确,因为 c
的类型为 char
。
getchar()
返回 int
类型的值,该值可以是可以使用 unsigned char
表示的值,也可以是 >EOF
- 这是一个实现定义的值,通常不能存储在 char
中。
将 c
的类型更改为 int
,而不是 char
。
以下注释特定于 Unix。
要按预期工作,用户需要在行首输入 CTRL-D(输入到程序的第一个字符,或紧接在换行符之后)。
如果在一行中的字符后按下 CTRL-D,则需要键入两次。第一个 CTRL-D 将导致在不关闭 stdout 的情况下读取前面的字符,并且下一次调用 getchar() 将等待另一个字符。此时,第二个 CTRL-D 将关闭 stdout,通常会导致 getchar() 返回 EOF(并输入 CTRL- 以外的内容) D 只是表示继续阅读)。
在您的情况下,由于您只输入一个 CTRL-D 而不是在一行的开头,因此您运行程序的环境(例如调试器)要么超时,要么也检测到 CTRL-D ,并导致程序终止。但这只是一种可能性 - 您没有提供足够的信息来确认这一点。
除了使用直接读取击键的技术之外,没有其他解决方法 - 这对于标准 C 来说是不可能的。同样,标准 C 中也不需要强制人类用户采取行动的方法。
关于C: Ctl+D 退出程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045414/
在长达数周的徒劳尝试中想出一个基本的。 PHP 应用程序,我决定也许我会尝试这个 CFML 的东西。 我已经安装了 XAMPP,并认为我只需要在我的系统上安装 Railo。在某一时刻,GUI 安装程序
我正在尝试使用按键更新并关闭弹出窗口。 如果按下按键 - ctl+s = 保存 如果按键 - ctl+x = 退出 $(window).keypress(function(event) { i
我在装有 OS Yosemite 10.10.5 的 Mac 上使用 XAMPP 时遇到问题 我暂时安装了 XAMPP,尝试重新启动它,但是启动 XAMPP 下载附带的 manager-osx 时,我
我用 C: 编写了这个函数 int process_list(node_t *head){ char c; node_t *prev = head; /* Define pointer
我正在尝试使用 v4l2-ctl 录制一个 15 秒的视频,但我对它的参数有点困惑,即使在 Internet 上查找文章之后也是如此。 v4l2-ctl --set-fmt-video=width=9
我这里有下面的文件 load data infile 'emp.csv' into table EMPLOYEES append fields terminated by ',' optionally
假设我运行 v4l2-ctl --stream-mmap=3 --stream-to=/dev/null,如何在不按 Ctrl+C 用于中断,例如来自另一个 shell 控制台? 最佳答案 除非他们添
我有一个在 Android 上工作的 USB 摄像头(通过 Android On-The-Go),我想改变摄像头的曝光。我已经能够通过在 Linux 机器上使用 v4l2-ctl 来实现它,我希望在我
我真的很喜欢 Vim 插入模式下的 CTRL-W 键,但在正常编辑中我也需要像 CTRL-Del 这样的东西。知道这是否存在,或者如何实现它? 另外,对于 CTRL-H 来说类似的事情怎么样?!我的意
所以,我一直在遵循 GitLab 的安装指南(在 Debian Stretch 上),但我总是遇到同样的错误... 链接:https://about.gitlab.com/install/#debia
我正在尝试为亚洲语言开发 Android IME(需要复杂的渲染,例如更改字形形式、重新排序字符顺序等)。在PC中,使用GTK、Pango、Graphite就足够了。在 Android 中,我如何解决
我想从 Oracle 迁移到 MySQL,其中一个重要步骤是替换构建在 Oracle 环境上的实际作业。 基本上,我每天都会收到一些来自另一个 Oracle 环境的“oracle”转储文件(主要是 C
我目前正在撰写硕士论文,面临着在时间逻辑中指定和验证我的方法。 在我的情况下,哪种时序逻辑最适合使用?我真的很想得到一些关于我的方法以及如何继续的反馈 我的模型由参与者组成,这些参与者将同时执行。对于
我正在学习如何在 Cloud9 中使用 mysql,我有一个脚本用于创建默认数据库和表并将示例数据加载到新数据库中。如何使用mysql-ctl工具执行脚本文件? 它可以很好地连接到数据库,我可以毫无问
即使搜索了太多,我也找不到适合我的问题的答案。我正在使用 Spring Tool Suite 并尝试创建一个新服务器,但收到错误消息 The specified server is not valid
这可能是一个迟钝的问题,但是在提交表单时是否有一种优雅的方式来模仿 anchor 标记的行为?我希望我的用户能够在提交表单时按住 Control 键并在新窗口中打开结果。现在我正在使用一种时髦的、不可
我想要完成的事情: 使用用户定义的波斯语字体和大小(CTL 语言)在 python-docx 中创建段落样式 问题: 我可以使用非 CTL 语言(例如英语)执行此操作: from docx impor
我正在尝试使用 C# 构建我自己的安全(非 http)服务器。当然,我使用的是 SslStream 和 AuthenticateAsServer。这就像冠军一样工作,除了我无法弄清楚如何让服务器将证书
我正在尝试创建一个模仿 emacs CTL-K 的 vim 键绑定(bind): If used at the end of a line, it kills the line-ending newl
我正在尝试使用spring-ldap org.springframework.ldap.support.LdapContextSource类访问LDAP。 以下是我的代码。 config file
我是一名优秀的程序员,十分优秀!