c - 无法完全执行 do-while 循环

标签 c while-loop char scanf

<分区>

我正在尝试使用 do-while 执行一个小程序。

#include<stdio.h>
#include<conio.h>
void main()
{
char another;
int num;
do
{
    printf("Enter a number");
    scanf("%d",&num);
    printf("Square of %d id %d",num,num*num);
    printf("Want to another another number y/n");
    scanf("%c",&another);
}while(another=='y');
}

现在,当我尝试执行该程序时,它运行良好。我输入一个数字,它显示它的正方形。然后我看到 Want to enter another number y/n。但是只要我按下任意键(y 或 n),程序就会在我按下 enter 键提供输入之前自行退出。我试了很多次都没有成功。

但如果我要求用户输入 1 或 2(代替 y/n),程序运行正常。在这种情况下,它需要一个整数输入并可以检查 while block 。如果 another == 1,程序再次运行。

我的问题是为什么我不能检查 while 条件中的字符。

最佳答案

它不起作用的原因是在 scanf 之后得到 num , 新行仍在缓冲区中,因此将由下一个 scanf 处理与 %c格式说明符。修复它的直接方法是使用:

scanf(" %c", &another);
//     ^space

请注意,您的原始 scanf("%c:,&another);不会编译,但我认为这是一个错字。并始终使用 int main ,或者它是未定义的行为。

关于c - 无法完全执行 do-while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510512/

相关文章:

c - 访问字符串中的元素?

c - Openssl中的大数模一个小整数

java - Java 中使用 charAt 时出现“字符串索引超出范围”错误消​​息

通过char元素插入C二叉搜索树

C - 处理 HTTP 请求的库

c - 链表中的键值被丢弃

javascript - 退出循环内调用的回调函数

python - 在触发器上重新启动的计时器 Python - 如何重新启动?

c++ - 以给定的年复利利率计算任何金额翻倍的时间

将 C 中的声明转换为 Delphi