如何才能让每一次的输入与输出在同一行?
示例:
(输入)1 2(输出)3
1 2 3
1 10 13
1 3 4
不要用流输入, 用即时性输入函数
windows
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
char chrArr[32];
int main()
{
int i = 0;
while ((chrArr[i] = getch()) && (chrArr[i] != '\r'))
{
++i;
}
char *num;
int lhs = strtol(chrArr, &num, 10);
int rhs = atoi(num);
printf("%d %d %d", lhs, rhs, lhs + rhs);
}
linux
#include <stdio.h>
#include <stdlib.h>
#include <termio.h>
#include <stdbool.h>
int getch(void)
{
return getchar();
}
void setio(bool bl)
{
static struct termios tm, tm_old;
if (bl)
{
tcgetattr(0, &tm);
tm_old = tm;
cfmakeraw(&tm); // 更改终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理
tcsetattr(0, TCSANOW, &tm);
}
else
{
tcsetattr(0, TCSANOW, &tm_old);
}
}
char chrArr[32];
int main()
{
setio(true);
int i = 0;
while ((chrArr[i] = getch()) && (chrArr[i] != '\r'))
{
++i;
}
setio(false);
char *num;
int lhs = strtol(chrArr, &num, 10);
int rhs = atoi(num);
printf("%d %d %d\n", lhs, rhs, lhs + rhs);
}
当你结束输入时按下了回车,这时候就换行了。试试约定另一个字符作为输入结束的标志,读到这个标志就结束输入,然后计算、输出。
试试这个,输入时不回显,输入第二个空格后一次输出结果:
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#define M 10
char a1[M];
char a2[M];
char getch()
{
char buf = 0;
struct termios old = {0};
fflush(stdout);
if (tcgetattr(0, &old) < 0)
perror("tcsetattr()");
old.c_lflag &= ~ICANON;
old.c_lflag &= ~ECHO;
old.c_cc[VMIN] = 1;
old.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &old) < 0)
perror("tcsetattr ICANON");
if (read(0, &buf, 1) < 0)
perror("read()");
old.c_lflag |= ICANON;
old.c_lflag |= ECHO;
if (tcsetattr(0, TCSADRAIN, &old) < 0)
perror("tcsetattr ~ICANON");
return buf;
}
int main() {
int i = 0;
while (i < M) {
a1[i] = getch();
if (a1[i] == ' ')
break;
i++;
}
i = 0;
while (i < M) {
a2[i] = getch();
if (a2[i] == ' ')
break;
i++;
}
int i1 = atoi(a1);
int i2 = atoi(a2);
int r = i1 + i2;
printf("%d %d %d", i1, i2, r);
}
如:
12 34 46