我试图一次读取一个字符并以累积方式将它们转换为int。如果用户输入的数字不是数字,我将重新开始整个过程。
当我运行此代码时,{i}下面的代码只有在按下回车键后才会执行,而不是按每次按键执行。简而言之,它不是一次取一个字符,而是使用enter作为输入终止的字符串,然后从输入字符串一次读取一个字符并执行while循环。
我很确定它与printf语句中的getchar()
有关。
我的代码:
\n
答案 0 :(得分:1)
这是因为getchar()
依赖于终端设置。由于大多数终端都启用了行缓冲,因此只有按Enter键才会等待。使用termios.h
,您可以禁用它。 getch()
仅限Windows。
以下是一些代码来执行getch()
在Linux中所做的事情。
#include <termios.h>
char getch(void) {
/* get original settings */
struct termios new, old;
tcgetattr(0, &old);
new = old;
/* set new settings and flush out terminal */
new.c_lflag &= ~ICANON;
tcsetattr(0, TCSAFLUSH, &new);
/* get char and reset terminal */
char ch = getchar();
tcsetattr(0, TCSAFLUSH, &old);
return ch;
}
另外,为什么realloc(blah, 0)
?为什么不只是free(blah)
?
此外,malloc(0)
是未定义的行为。它可以返回NULL或给出唯一的指针。与realloc(blah, 0)
相同。
答案 1 :(得分:0)
只需使用:
#include <stdlib.h>
char getch()
{
char c; // This function should return the keystroke
system("stty raw"); // Raw input - wait for only a single keystroke
system("stty -echo"); // Echo off
c = getchar();
system("stty cooked"); // Cooked input - reset
system("stty echo"); // Echo on - Reset
return c;
}