【问题标题】:How to keep input before CTRL-C如何在 CTRL-C 之前保持输入
【发布时间】:2013-03-14 16:13:39
【问题描述】:

我在 Stack 上找到了这段代码:

...
char buffer[256]

while((count=read(0, buffer, 256)) > 1)
   {
   if(buffer[count] = '\n') break;
   }

   buffer[n-1] ='\0';

我可以从标准输入中读取,但我有 2 个问题:

  1. 为什么在 if() 中使用 '=' 而不是 '=='?
  2. 如果我在写完东西后按CTRL-C,我怎么能保留我的东西 写的?

谢谢

【问题讨论】:

  • 使用= 而不是== 可能是一个错字。否则没有意义。另外,应该是if (buffer[count-1] == '\n')。
  • 绝对不是拼写错误,read返回read count。 while 循环运行时读取计数大于 1。
  • @Armin:问题是关于if 中的=,而不是while。
  • @user315052 正确,我完全错过了 if(),Daniel Fischer 是对的。

标签: c unix ubuntu


【解决方案1】:

为什么在 if() 中使用 '=' 而不是 '=='?

在 if 语句中,可能是一个错字。因为

buffer[count] = '\n'

将始终为 '\n',在 C 中为“真”(非空)。

如果我在写完东西后按了CTRL-C,我怎么能保留我写的东西?

在终端中按 CTRL-C 将向正在运行的进程发送一个 SIGINT。通常,您的应用程序将立即退出,无论它在做什么。

您可以使用some lines of code 捕获 SIGINT 事件,但“保留您所写的内容”有什么意义?

【讨论】:

  • buffer[count] 也差一档。 ^C 通常会生成SIGINT。
  • 将其更改为SIGINT。是的,buffer[count] 似乎差了一个。
  • “中间”->“立即”?
  • @undur_gongor:当然;)英语不是我的第一语言,所以我使用拼写检查器。我点击了错误的建议。
  • 我同意保留我所写的内容毫无意义,但这是本练习的目的之一。顺便问一下,while 中的条件是否会运行?
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 2017-04-18
  • 2010-11-11
  • 2022-01-01
  • 1970-01-01
  • 2021-10-29
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多