一个while里面嵌套switch的结构,很坑爹的结果

时间:2022-01-02 20:48:02
代码:
#include<stdio.h>
#include<curses.h>
void initial();
void main()
{
int i=0;
int a=10;
initial();
for(i=0;i<4;i++)
{
move(a,15);
printw("this is a line");
a++;
}
printw("good!");
a=a-4;
move(a,15);
//do
//{
int b=10;
int ch;
ch=getch();

switch(ch)
{
case KEY_UP:
--b;
move(b,15);
printw("%d",b);
break;
//case KEY_DOWN:
//++b;
//endwin();
//break;
default:
printw("%d--",b);
continue;
}
--b;
printw("fuck--%d",b);
//}while(1);


}//end of main
void initial()
{
initscr();
cbreak();
nonl();
noecho();
intrflush(stdscr,FALSE);
keypad(stdscr,TRUE);
refresh();
}

原设计要不停循环,变换b的值,改变坐标。可是呢b的值只变了一次,就不再变了。坑爹啊。怎么解决?

8 个解决方案

#1


那个注释掉的while和do忘记改回去了。我在测试找问题呢。在线等答案。

#2


大家不必研究那个curses库,就研究这个循环结构就行了。循环的问题。

#3


int b=10;
这一句放到do while循环外面去。

#4


你把这句 int b=10;放到do-while前面定义试试。

#5


引用 3 楼  的回复:
int b=10;
这一句放到do while循环外面去。

没用,开始都是放前面的。改进后才这样。不是位置的问题。请大家仔细看代码,仔细思考,其实是很简单的问题,只不过找不到解决办法。谁看懂问题再回帖,然后贴出解决办法。

#6



#define KEY_UP 'a'  //我下面将 ch 改成char类型了
int b = 10;  //放到main函数外面,作全局变量
char ch;  //我改成char类型了 
ch=getchar();

#7


实在不理解楼主的意思,再不行就算了。

#include<stdio.h>

int main()
{
int i=0;
int a=10;

for(i=0;i<4;i++)
{

puts("this is a line");
a++;
}
puts("good!");
a=a-4;
int flag=0;
do
{
int b=10;
int ch;

flag=0;
while(1) {
  ch=getchar();
  scanf("%*[^\n]");
  scanf("%*c");//清空回车,getch()不需要这一步
  switch(ch)
  {
    case 'a':
    --b;

    printf("%d\n",b);
    break;
  
  default:
   flag=1;
  printf("%d--\n",b);
  }
  if(flag==1)
    break;
}
if(flag==1) continue;
--b;
printf("fuck--%d\n",b);
}while(1);


}

#8


引用 7 楼  的回复:
实在不理解楼主的意思,再不行就算了。
C/C++ code

#include<stdio.h>

int main()
{
int i=0;
int a=10;

for(i=0;i<4;i++)
{

puts("this is a line");
a++;
}
puts("good!");
a=a-4;
int flag=0;
do
{
int b=10;
int ch;

flag=……

谢谢。因为我把ch=getchar()放到while外边了,怪不得只循环了一次呢?怪我粗心,麻烦大家了。

#1


那个注释掉的while和do忘记改回去了。我在测试找问题呢。在线等答案。

#2


大家不必研究那个curses库,就研究这个循环结构就行了。循环的问题。

#3


int b=10;
这一句放到do while循环外面去。

#4


你把这句 int b=10;放到do-while前面定义试试。

#5


引用 3 楼  的回复:
int b=10;
这一句放到do while循环外面去。

没用,开始都是放前面的。改进后才这样。不是位置的问题。请大家仔细看代码,仔细思考,其实是很简单的问题,只不过找不到解决办法。谁看懂问题再回帖,然后贴出解决办法。

#6



#define KEY_UP 'a'  //我下面将 ch 改成char类型了
int b = 10;  //放到main函数外面,作全局变量
char ch;  //我改成char类型了 
ch=getchar();

#7


实在不理解楼主的意思,再不行就算了。

#include<stdio.h>

int main()
{
int i=0;
int a=10;

for(i=0;i<4;i++)
{

puts("this is a line");
a++;
}
puts("good!");
a=a-4;
int flag=0;
do
{
int b=10;
int ch;

flag=0;
while(1) {
  ch=getchar();
  scanf("%*[^\n]");
  scanf("%*c");//清空回车,getch()不需要这一步
  switch(ch)
  {
    case 'a':
    --b;

    printf("%d\n",b);
    break;
  
  default:
   flag=1;
  printf("%d--\n",b);
  }
  if(flag==1)
    break;
}
if(flag==1) continue;
--b;
printf("fuck--%d\n",b);
}while(1);


}

#8


引用 7 楼  的回复:
实在不理解楼主的意思,再不行就算了。
C/C++ code

#include<stdio.h>

int main()
{
int i=0;
int a=10;

for(i=0;i<4;i++)
{

puts("this is a line");
a++;
}
puts("good!");
a=a-4;
int flag=0;
do
{
int b=10;
int ch;

flag=……

谢谢。因为我把ch=getchar()放到while外边了,怪不得只循环了一次呢?怪我粗心,麻烦大家了。