【问题标题】:Unable to execute a do-while loop completely [duplicate]无法完全执行do-while循环[重复]
【发布时间】:2013-10-30 21:20:19
【问题描述】:

我正在尝试使用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 块。如果another == 1,程序再次运行。

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

【问题讨论】:

    标签: c while-loop char scanf


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢兄弟。你真的帮了我很多。我厌倦了思考我的代码有什么问题。你救了我。但是你能解释一下为什么我在 %c 之前需要一个空格而在 %d 中不需要吗??
    • @user2899258 基本上是因为换行符是有效字符但不是有效整数,所以scanf只会在格式说明符有@987654329时处理空白字符(包括换行符) @,c,或n。在%c 之前添加一个空格将使scanf 忽略您需要的字符之前的任何空格。
    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多