C – getchar()在循环中?
我如何在循环中使用getchar()? 我现在有…
for (p=0; p<n_players; p++) { ... fflush(stdin); getchar(); }
但它不起作用……如果n_players为3,它只在最后执行getchar 2次…
for (p=0; p<n_players; p++) { blank_start(); ascii_art_title(); printf("%s, tocca a te...\n",player_info[p].player_name); srand(time(NULL)); random_speed = MIN_WHEEL_SPEED + rand()%MAX_WHEEL_SPEED; move_wheel_pointer(random_speed, &pointer); if (player_points(&wheel[pointer]) == 0){ player_info[p].points = wheel[pointer]; } else { player_info[p].points = 0; } printf("\nGuadagni %d punti...\n",player_info[p].points); if (p<(n_players-1)) { printf("\nOra tocca a te, giocatore %d\n",(p+2)); } fflush(stdin); getchar(); }
getchar跳过第一个循环
首先,刷新输入流的结果是不确定的。 其次,“不起作用”并没有给我们带来很多东西。
fflush
的行为没有在输入流上定义,因此所呈现的代码是荒谬的。
如果n_players为3,那个循环确实会发生3次。
getchar()
不是处理用户输入的好选择。 话虽如此,如果您仍想使用该function,您可以尝试不使用fflush
并将两个调用堆积到getchar
:
像这样的东西:
for (p=0; p
使用getchar()
是它返回键盘缓冲区中可用的下一个字符。 所以,如果你做一个c = getchar()
,用户会:
E '\ n'
(意思是他/她按下字符E后跟ENTER)
c
将保持值'E',下一次调用getchar()
将消耗用户按下的ENTER('\ n')。
因此,正如您所看到的,它非常棘手且难以正确控制。
如果是用于测试某些代码,那么确定。 如果是真实应用程序,请尝试使用平台相关库来进行用户输入(Windows上为Win32,Linux上为GTK,Linux上为ncurser等)
1]输入流上的fflush是未定义的行为。
2]你的循环确实执行了3次。 对getchar()的第二次调用将使用第一次输入时放在那里的流中的ENTER
键。 因此,你认为它只被召唤两次。
Inshort,再放一个getchar()来消耗\n
。 这将解决您的问题。