C编程: Unable to perform do while looping in visual studio

标签 c visual-studio-2010

我想找到不同数字的平方。我正在使用 do while 循环,以便在计算第一个数字的平方后,它会询问我是否要找到另一个数字的平方。

但问题是,当我将答案选择为 'y' 或 'Y' 或任何字符时,它仅返回到编辑器窗口,而不计算第二个数字的平方并且不显示错误。那么我的程序出了什么问题?

#include<stdio.h>
#include<conio.h>

void main()
{
    int num,sqr;
    char ans;
    do
    {
        printf("enter the number:\n");
        scanf("%d",&num);
        sqr=num*num;

        printf("square is %d",sqr); 
        printf("\ndo you want to continue?");
        scanf("%c",&ans);
    }while(ans=='y'|| ans=='Y');

    getch();
}

enter image description here

最佳答案

您的代码的问题在于,在第一个 scanf 中您输入了数字来获取平方。由于我们知道 stdin 流缓冲区是行缓冲,因此仅当流缓冲区遇到换行符或 EOF 字符时,输入数据才会从流缓冲区发送到变量。一旦您按下 Enter 键,数据就会分配给您的变量,但换行符(Enter 键)仍会进入标准输入流缓冲区。因此,在立即 scanf/getch 函数中,该换行符将被刷新。在您的情况下,第二个 scanf 乐趣是读取先前输入的换行符(意味着 asn='\n'),而 while 循环将其评估为错误条件并退出循环。请参阅下面的代码片段,我已修改为仅添加一行以从标准输入流缓冲区中清除任何换行符或 EOF 字符。运行代码并验证它。

#include<stdio.h>
#include <stdlib.h>

void main()
{
    int num,sqr;
    char ans;
    do
    {
        printf("enter the number:\n");
        scanf("%d",&num);
        sqr=num*num;

        printf("square is %d",sqr);
        while((getchar() != '\n') && (getchar() != EOF));
        printf("\ndo you want to continue?");
        scanf("%c",&ans);
    }while(ans=='y'|| ans=='Y');

    getchar();
}

关于C编程: Unable to perform do while looping in visual studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319706/

相关文章:

c++ - QT creator和Designer的区别——起步QT

c - Visual Studio 转换问题

c - 定义一个非常大的double类型的二维数组

c - C语言中如何判断一个字符数组有多少个字符?

c++ - Microsoft Visual Studio 2010 没有将构建工具放在 PATH 中以获得干净的目标?

c++ - VS 2010 智能感知不适用于上转换项目

visual-studio-2010 - 如何更改 Visual Studio Extension 中菜单命令的图标?

c++ - "Proper"错误输入/行为时退出 C/C++ 程序的方法

c - 使用 Malloc 通过 GMP 处理大量数据

c - 流上有哪些可能的错误条件会导致ferror()被设置?