相关疑难解决方法(0)

从标准输入中捕获字符,无需等待按下输入

我永远不会记得我是怎么做的,因为它对我来说很少见.但是在C或C++中,从标准输入读取字符而不等待换行符的最佳方法是什么(按回车键).

理想情况下,它也不会将输入字符回显到屏幕上.我只想捕捉击键而不影响控制台屏幕.

c c++ inputstream

163
推荐指数
11
解决办法
19万
查看次数

C++等待用户输入

在控制台应用程序中等待用户输入的最佳方法是什么?

std::cout << "press any key to exit...";
// wait for user to hit enter or another key
Run Code Online (Sandbox Code Playgroud)

c++

100
推荐指数
4
解决办法
25万
查看次数

C非阻塞键盘输入

我正在尝试用C语言编写一个程序(在Linux上)循环,直到用户按下一个键,但不应该要求按键继续每个循环.

有一个简单的方法吗?我想我可以做到这一点,select()但这似乎很多工作.

或者,有没有办法在程序关闭之前捕获ctrl- ckeypress进行清理而不是非阻塞io?

c linux asynchronous input nonblocking

76
推荐指数
5
解决办法
10万
查看次数

18
推荐指数
2
解决办法
4万
查看次数

对getchar()函数感到困惑

getchar()对以下代码中的角色感到困惑.我的意思是我知道它帮助我看到输出窗口,只有在按下Enter键时才会关闭.

所以getchar()基本上等着我按回车然后再读一个字符.

这个函数读取的单个字符是什么?我没有按键盘上的任何键来阅读.

现在当它没有读任何东西的时候,为什么它没有给出一个错误,说"嘿,你没有输入任何东西供我阅读"?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c getchar

16
推荐指数
3
解决办法
9139
查看次数

getchar和putchar

我的C代码:

int c;
c = getchar();

while (c != EOF) {
    putchar(c);
    c = getchar();
}
Run Code Online (Sandbox Code Playgroud)

为什么这个程序在输入方面会这样反应hello

hello
hello
Run Code Online (Sandbox Code Playgroud)

而不是像:

hheelloo
Run Code Online (Sandbox Code Playgroud)

c getchar

5
推荐指数
2
解决办法
2164
查看次数

C中的getchar()完成而不按Enter键

从我之前的帖子中,我发现getchar()只有在按Enter键时才会完成.我们考虑一下这段代码:

#include<stdio.h>
main()
{
  getchar();
  getchar();
  getchar();
  getchar();
  getchar();


}
Run Code Online (Sandbox Code Playgroud)

我希望它能像这样运行:我按下某个键1,然后按Enter键,然后按键2键,然后按键3键,然后按键4键,然后按键4键,输入键,最后按键5键,输入,程序应立即终止.这不是实际发生的事情.会发生什么:我按下某个键1然后按Enter键,然后按键2键,输入键,然后按键3键,输入,程序最终终止!

  • 为什么最后两个getchar()不起作用?

我观察到的另一个奇怪的事情是,如果我这样做:key1,key2,key3,key4 + Enter然后程序终止.例如,如果我连续按q,w,e和r然后按Enter键,程序将终止.

  • 为什么不是所有的getchar()都要求输入?这是否意味着getchar()将任何其他键作为Enter?但接下来的密钥是否作为下一个getchar()的输入?

让我们考虑另一个代码:

#include<stdio.h>
main()
{

  int c=getchar();
  int d=getchar();
  int e=getchar();
  printf("2 getchar are remaining\n");
  int f=getchar();
  int g=getchar();
  printf(" c is %d, d is %d, e is %d, f is %d and g is %d",c,d,e,f,g);

} 
Run Code Online (Sandbox Code Playgroud)

我输入:ABCDEFG然后输入.当我按下C或D时,应该打印第2getchar.但它最后打印,意味着所有getchar()s同时执行 - 这很奇怪.

  • 程序是否逐行执行?即在第三个getchar之后,printf()应该可以工作.但是当所有的getchar()都被执行时它终于工作了.

c io getchar

3
推荐指数
1
解决办法
3166
查看次数

如何在按键后立即读取终端的输入缓冲区

我想在我的c程序中读取箭头按键并用其他字符串替换它们(立即在终端本身中).我正在尝试在unix终端中实现bash历史记录功能.我写了这段代码.

int
main(int argc, char *argv[])
{
    char c;
    char str[1024];
    int i = 0;
    while((c = fgetc(stdin)) != '\n'){
      if(((int)c) == 27){
        c=fgetc(stdin);
        c=fgetc(stdin);
        if (c == 'A')
        {
          printf("%c[A%c[2K",27, 27);
          printf("UP");
        }
      }
      str[i++] = c;
    }
    printf("\n");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为终端等待换行符或EOF将输入缓冲区发送到stdin.所以,我必须按回车键/返回键来分析用户输入.

在这个答案中,用户提到使用system ("/bin/stty raw");但这取代了所有默认的终端行为(例如退格,删除等).

那么,有没有什么方法可以直接读取/操作终端输入缓冲区并在检测到箭头按键时调整缓冲区本身?

环境 - Ubuntu(Linux)

更新1:是否有更改信号/中断的方法(默认是按输入键),使终端将存储的输入发送到缓冲区?这也可以帮助我实现相同的行为.

最终守则:

我通过检查输出来找到特定按键的ASCII字符 strace bash

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

#define ESCAPE '\33'
#define BACKSPACE '\177'
#define …
Run Code Online (Sandbox Code Playgroud)

c linux stdin input-buffer

3
推荐指数
1
解决办法
2322
查看次数

仅从 cin 读取一个字符

读取时,std::cin即使我只想读取一个字符。它将等待用户插入任意数量的字符并点击Enter继续!

我想逐个字符读取字符,并在用户在终端中键入时为每个字符执行一些说明。

例子

如果我运行这个程序并输入abcd那么Enter结果将是

abcd
abcd
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

aabbccdd
Run Code Online (Sandbox Code Playgroud)

这是代码:

int main(){
    char a;
    cin >> noskipws >> a;
    while(a != '\n'){
        cout << a;
        cin >> noskipws >> a;
    }
}
Run Code Online (Sandbox Code Playgroud)

请问怎么做?

c++ cin char

1
推荐指数
3
解决办法
2万
查看次数

为什么getchar在输入一个字符后等待?

这是我的代码:

#include <stdio.h>

int main()
{
        char a = getchar();
        printf("char: %c", a);
}
Run Code Online (Sandbox Code Playgroud)

我正在编译这个gcc.

运行时,即使在控制台上输入一个字符后,程序也会等待输入.它不应该立即退出并打印角色吗?我在Ubuntu for Windows上运行它,如果这可以有所作为.

c input getchar

0
推荐指数
1
解决办法
87
查看次数