int main(int argc, char *argv[]){
//introduction
printf("WELCOME TO PENTAGO!!!\n\n");
int size = atoi(argv[2]);
game* g = new_game(size, CELLS);
printf("PENTAGO Board: (. : Empty, * : Black, 0 : White)\n");
board_show(g->b);
while(1){
if(g->next == WHITE_NEXT){
printf("White: \n");
}
if(g->next == BLACK_NEXT){
printf("Black: \n");
}
//move
//place marble;
char move;
printf("Please enter a move: ");
scanf(" %c", &move);
char a1 = move; move++; char a2 = move;
pos p = make_pos(charToInt(a1),charToInt(a2));
place_marble(g,p);
board_show(g->b);
//twist quadrant;
printf("\nTo twist please enter quadrant q (1 : NW, 2 : NE,3 : SW,4 : SE) and direction d (c : clockwise, w: counterclockwise) in the given format: qd \nFor example 2w indicates a counterclockwise twist in the north east quadrant.");
char entry;
printf("Twist Entry: ");
scanf(" %c", &entry);
char q1 = entry ; entry++ ; char d1 = entry;
twist_quadrant(g,charToQuad(q1), charToDir(d1));
board_show(g->b);
}
printf("\n");
}
我在c的主要函数中遇到scanf函数的奇怪问题。如您所见,我在while循环中包含了两个scanf函数。在循环的每次迭代中,只有第一个scanf函数将运行,而第二个则被完全跳过。可能是什么问题?任何帮助将不胜感激。
答案 0 :(得分:0)
scanf(" %c", &move);
scanf(" %c", &entry);
在这种情况下,人们通常使用getch()
。更直接。
char a1 = move; move++; char a2 = move;
char q1 = entry ; entry++ ; char d1 = entry;
这些真的很奇怪。你想做什么?
char move;
char entry;
良好的编程习惯告诉我们,变量只能在函数的开头定义。通常,编译器会拒绝函数中间的定义。
评论:
printf(“ \ n要扭曲,请输入象限q (1:NW,2:NE,3:SW,4:SE)和方向d (c:顺时针,w:逆时针),格式为:qd \ n例如, 2w 表示东北象限的逆时针旋转。”);
要求使用提供2个非空白字符。一个被第二个scanf()
(一个紧跟在注释之后)消耗,另一个被保留在缓冲区中。然后,它由第一个scanf()
消耗。这就是为什么您对某些scanf()
不执行的感觉有误。
您使用哪个键进行移动?某些键(例如箭头)实际上会生成2个字符的序列:第一个始终为0x00,第二个特定于每个键。这可能是另一个惊奇的来源。
当密钥不是预期的密钥之一时,您无法正确处理这种情况。在这种情况下,应跳过整个代码块,然后重新启动循环。