使用cbreak()在接收到两位数地址后直接在数组位置打印数据&书信电报;诅咒;和getch();

使用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

我是这方面的初学者,所以如果这是显而易见的,请对我放轻松。 我用的是C

我正在使用cbreak();从curses.h获取Linux终端的实时输入。 我正在使用getch();一次捕获一个输入,最多捕获两个,并使用这些输入寻址2D数组

我希望它在接收到两位数地址后直接在阵列位置打印数据。 实际上,它采用第一组两位数字,然后在接收到第二个位置地址的第一个数字时打印第一个数组位置

以下是我所拥有的:

   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循环中取出时,它根本不会打印,但我将重新检查此项。