【问题标题】:How to input a char or a string without hitting the return key如何在不按回车键的情况下输入字符或字符串
【发布时间】:2011-11-10 12:47:20
【问题描述】:

我正在使用 Foundation 学习 Objective C 并打印到控制台。我想知道(以及如何)是否可以输入一个字符或字符串,并且它会自动打印出来而无需按下返回键(或任何键)。显然,下面的简单代码仍然需要按下回车键。我知道这段代码混合在 C 和 objC 之间,但我一直在尝试不同的想法。我也试图在不使用 Ncurses 的情况下做到这一点。提前致谢。

字符输入[1];

NSLog(@"enter key:");

fgets(input, 1, stdin);

NSString *inputString = [[NSString alloc]initWithCString:input];

NSLog(@"Input = %s",input); 

我刚刚找到了一个很好的答案,如下所示: // 设置终端为原始模式 system("stty raw");

// Wait for single character 
char input = getchar(); 

// Echo input:


// Reset terminal to normal "cooked" mode 
system("stty cooked"); 

// And we're out of here 

NSLog(@"INPUT = %c",input);

【问题讨论】:

  • 问了 8 个问题,没有一个被接受,并且投了零票——人们可能想知道为什么他们应该把宝贵的时间放在你身上。
  • @KerrekSB - 供搜索者使用。人们想要回答同样的问题,现在他们会找到它们。如果这就是你所追求的,甚至可能会给你投票。并非每个人都以相同的方式参与。
  • 您知道您使用system() 的解决方案是在子进程中启动一个完整的shell,在这种情况下,与我的回复中提到的cfmakeraw() 几乎相同,对吧?此外,stty 的手册提到了 tty 标记原始选项集,那么为什么不直接使用 tcsetattr 设置它们呢?我感觉你故意忽略你得到的答案。
  • @KerrekSB 放松了一点——你看起来很痛苦和悲伤。我的帖子清楚地表明我是目标 C 的新手,我有一个真正的问题。迄今为止,这个网站对看似好人的人来说确实很有帮助 - 不要让它失望。
  • @KateGregory - 我对 upVotes 不感兴趣。我只是找到了一个答案,我认为它可能会帮助其他人阅读这篇文章。

标签: c++ objective-c


【解决方案1】:

阅读tcsetattrtcgetattr 的手册。查找标志ICANONIECHO,并查看有关cfmakeraw 的部分。文档console_ioctl(4)tty_ioctl(4) 可能更有趣,例如确定tty 的大小。

【讨论】:

  • 感谢您的回答 - 我需要一些时间来解决这个问题。
  • 而且,您想出解决方案了吗?测试结果如何?
【解决方案2】:

查看http://pwilson.net/sample.html 并搜索 kbhit.c 。该函数应该对你有用,虽然它没有用 Objective C 测试过。

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    相关资源
    最近更新 更多