使用cbreak()在接收到两位数地址后直接在数组位置打印数据&书信电报;诅咒;和getch();
我是这方面的初学者,所以如果这是显而易见的,请对我放轻松。 我用的是C 我正在使用cbreak();从curses.h获取Linux终端的实时输入。 我正在使用getch();一次捕获一个输入,最多捕获两个,并使用这些输入寻址2D数组 我希望它在接收到两位数地址后直接在阵列位置打印数据。 实际上,它采用第一组两位数字,然后在接收到第二个位置地址的第一个数字时打印第一个数组位置 以下是我所拥有的:使用cbreak()在接收到两位数地址后直接在数组位置打印数据&书信电报;诅咒;和getch();,c,linux,arrays,input,terminal,C,Linux,Arrays,Input,Terminal,我是这方面的初学者,所以如果这是显而易见的,请对我放轻松。 我用的是C 我正在使用cbreak();从curses.h获取Linux终端的实时输入。 我正在使用getch();一次捕获一个输入,最多捕获两个,并使用这些输入寻址2D数组 我希望它在接收到两位数地址后直接在阵列位置打印数据。 实际上,它采用第一组两位数字,然后在接收到第二个位置地址的第一个数字时打印第一个数组位置 以下是我所拥有的: int northsouth[2]; //array to hold input int
int northsouth[2]; //array to hold input
int nschoice; //counter for for below
int loopOn = 1;
int northSave; //(confused me) places to save value of northSouth[] in attempt
int southSave; //to print only after receiving two digits.
while(loopOn != 0)
{
for(nschoice = 0; nschoice < 2; ++nschoice)
{
northsouth[nschoice] = getch();
if(nschoice == 1 && northsouth[0] != northSave && northsouth[1] != southSave)
{
strcat(input, l[northsouth[0] -= 48][northsouth[1] -= 48]);
printf("\033[2J\033[1;1H");
printf("%s", input);
northSave = northsouth[0];
southSave = northsouth[1];
}
}
}
int南北[2]//用于保存输入的数组
int nschoice//下面的柜台
int-loopOn=1;
int northSave//(让我困惑)尝试保存南北[]价值的地方
int southSave//仅在收到两位数后打印。
while(loopOn!=0)
{
对于(nschoice=0;nschoice<2;++nschoice)
{
南北[nschoice]=getch();
如果(nschoice==1&&northsouth[0]!=northSave&&northsouth[1]!=southSave)
{
strcat(输入,l[northsouth[0]-=48][northsouth[1]-=48]);
printf(“\033[2J\033[1;1H”);
printf(“%s”,输入);
northSave=northsouth[0];
southSave=northsouth[1];
}
}
}
如果我听懂了您的意思,您希望在阅读两位数字后打印(而不是在每一位数字之后)
如果是这样,您应该将
If
及其整个块从for
循环中取出,这样for
循环将读取两位数字,而If
将打印出来。这是一个问得很好的问题,但我真的不知道问题出在哪里(尽管这可能是由于时间和缺少咖啡造成的)因为它实际上是在两位数字后打印的,只是它打印的是我在最后一位数字前输入的两位数字所在的地址,而不是最后两位。如果我输入“123”,它会给我位于12((12)3)的地址,而不是给我位于23(1(23))的地址。留下1((1)23)对于之前输入的地址。当我将其从for循环中取出时,它根本不会打印,但我将重新检查此项。