由于某种原因,这个while循环执行两次,并且在提示输入之前将字符串打印两次。我原以为输入缓冲区中有一个字符,但据我所知。有什么建议吗?
while (count >= 0 && stop != 83 && isClosed == 0) {
printf("Percentage of Door Closed: %d\n",count);
count -= 10;
printf("If sensor detects object press 'S'\n");
printf("Press any button to continue closing door\n");
stop = getchar();
if (count == 0) {
isClosed=1;
}
}
输出:
Percentage of Door Closed: 100
If sensor detects object press 'S'
Press any button to continue closing door
Percentage of Door Closed: 90
If sensor detects object press 'S'
Press any button to continue closing door
a
Percentage of Door Closed: 80
If sensor detects object press 'S'
Press any button to continue closing door
Percentage of Door Closed: 70
If sensor detects object press 'S'
Press any button to continue closing door
S
答案 0 :(得分:2)
当您键入S <Enter>
时,您将获取发送到输入流的换行符。您可以通过以下几种方式处理:
while ((stop = getchar()) == '\n'); // loops until it reads a non-newline
// character
或
scanf(" %c", &stop); // note leading blank in format string; this tells scanf
// to skip any leading whitespace characters.
答案 1 :(得分:0)
可能是您使用也填充缓冲区的键启动程序,因为某些键可能会生成多个字符。在stop = getchar()处放置一个断点,并在循环的第一次迭代中查看stop时的值。
答案 2 :(得分:0)
我今天遇到了类似的问题,因为我没有使用getchar
来获取我的角色,而是使用scanf("%c", &stop)
。我将%c
更改为%s
进行字符串检索后修复了问题。
我不确定,但getString
可能会解决您的问题,因为我认为它会做同样的事情。