C 编程:在 visual studio 中循环时无法执行 do
C programming: Unable to perform do while looping in visual studio
我想求不同数的平方。我正在使用 do while 循环,以便在计算第一个数字的平方后,它会询问我是否要查找另一个数字的平方。
但问题是当我将答案选择为 'y' 或 'Y' 或任何字符时,它 returns 编辑器 window 仅不计算第二个数字的平方并且没有显示错误。那么我的程序出了什么问题?
#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();
}
您的代码存在问题,在第一次 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();
}
我想求不同数的平方。我正在使用 do while 循环,以便在计算第一个数字的平方后,它会询问我是否要查找另一个数字的平方。
但问题是当我将答案选择为 'y' 或 'Y' 或任何字符时,它 returns 编辑器 window 仅不计算第二个数字的平方并且没有显示错误。那么我的程序出了什么问题?
#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();
}
您的代码存在问题,在第一次 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();
}