我有这个代码块(函数省略,因为逻辑是家庭作业的一部分):
#include <stdio.h>
int main()
{
char c = 'q';
int size;
printf("\nShape (l/s/t):");
scanf("%c",&c);
printf("Length:");
scanf("%d",&size);
while(c!='q')
{
switch(c)
{
case 'l': line(size); break;
case 's': square(size); break;
case 't': triangle(size); break;
}
printf("\nShape (l/s/t):");
scanf("%c",&c);
printf("\nLength:");
scanf("%d",&size);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
前两个Scanf的工作很好,没有问题,一旦我们进入while循环,我有一个问题,当你应该被提示输入一个新的形状char时,它会跳转到printf
Length的长度并等待输入从那里获取一个char,然后是循环的下一次迭代的小数.
Preloop迭代:
Scanf:形状.Works Great
Scanf:长度.没问题
循环1.
Scanf:形状.跳过此
Scanf:长度.问题,这个scanf映射到形状char.
循环2
Scanf:形状.跳过此
Scanf:长度.问题,这个scanf现在映射到int大小.
它为什么这样做?
执行以下代码时遇到了困难.完成一次执行后,变量't'取空值.通过使用getch()而不是scanf()解决了这个问题.但我不知道为什么会这样.任何解释?这是不起作用的程序.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
while(1)
{
scanf("%c",&t);
printf("\nValue of t = %c",t);
printf("\nContinue (Y/N):");
char a=getche();
if(a=='n' || a=='N')
exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这是正确执行的程序.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
while(1)
{
t=getch();
printf("\nValue of t = %c",t);
printf("\nContinue (Y/N):");
char a=getche();
if(a=='n' || a=='N')
exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)