c - 关于main函数中scanf问题的问题
问题描述
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 中的 main 函数中遇到了一个奇怪的问题,即 scanf 函数。如您所见,我在 while 循环中包含了两个 scanf 函数。通过循环的每次迭代,只有第一个 scanf 函数会运行,而第二个函数会被完全跳过。可能是什么问题?任何帮助将不胜感激。
解决方案
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,第二个特定于每个键。这可能是另一个令人惊讶的来源。
当密钥不是预期的密钥之一时,您没有正确处理这种情况。在这些情况下,应该跳过整个代码块并重新启动循环。
推荐阅读
- c++ - 使用 std::hash
对于自定义类 - javascript - 从 Vue 中添加 Google 跟踪代码管理器(在获得同意后)
- java - 使用 Spring Kafka 编写的单元测试 Kafka Consumer
- sql - 创建具有较小存储桶的新 SQL 列(基于文本,而不是数字)
- jquery - showIn 导致表单验证
- php - index.php 页面未加载到 GCE VM 实例的主域上
- python - 将 Pandas 数据框的索引拆分为单独的列
- .net - .Net 控制器接收和处理提交的 PDF 的操作
- javascript - 有没有办法从这些对象中提取数据值
- python - 如何按年扩展/添加行?