这真的很奇怪,它打印这一行printf("Do you want to continue Yes (Y) or No (N): \n");,不使用任何循环,但它仍然打印该语句两次
int main()
{
int led=0;
int ohm=0;
char check;
int flag=0;
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close: \n\n");
printf(" ******************** Press 1 for switch (LED) 1 ********************\n");
printf(" ******************** Press 2 for switch (LED) 2 ********************\n");
printf(" ******************** Press 3 for switch (LED) 3 ********************\n");
printf("Switch: ");
scanf("%d", &led);
}
printf("\n\n");
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: \n\n");
printf(" ******************** Press 1 for 10 ohm resistance ********************\n");
printf(" ******************** Press 2 for 20 ohm resistance ********************\n");
printf(" ******************** Press 3 for 30 ohm resistance ********************\n");
printf("Resistance: ");
scanf("%d", &ohm);
}
while (flag == 0)
{
//LED-1
if(led== 1 && ohm== 1 )
{
printf("LED-1 is blinking 2 times\n");
}
if(led== 1 && ohm== 2)
{
printf("LED-1 is blinking 4 times\n");
}
if(led== 1 && ohm== 3 )
{
printf("LED-1 is blinking 6 times\n");
}
//LED-2
if(led== 2 && ohm== 1 )
{
printf("LED-2 is blinking 2 times\n");
}
if(led== 2 && ohm== 2 )
{
printf("LED-2 is blinking 4 times\n");
}
if(led == 2 && ohm == 3)
{
printf("LED-2 is blinking 6 times\n");
}
//LED-3
if(led == 3 && ohm == 1 )
{
printf("LED-3 is blinking 2 times\n");
}
if(led == 3 && ohm == 2)
{
printf("LED-3 is blinking 4 times\n");
}
if(led == 3 && ohm == 3)
{
printf("LED-3 is blinking 6 times\n");
}
led = 0;
ohm = 0;
printf("Do you want to continue Yes (Y) or No (N): \n");
scanf("%c", &check);
if(check =='Y' || check =='y')
{
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close on: ");
scanf("%d", &led);
}
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: ");
scanf("%d", &ohm);
}
}
if(check=='N' || check=='n')
{
printf("Thanks for using the program");
flag = 1;
}
}
return 0;
}发布于 2013-07-29 07:07:56
在代码中使用scanf(“%d”&led);、scanf(“%c”&check)等。在格式说明符之前添加一个额外的空间将解决缓冲区中的垃圾/换行符造成的问题。
发布于 2013-07-29 06:53:03
scanf("%c", &check);第一次发现一些垃圾(与y或n不匹配),所以您的程序可以执行另一个循环。
正如其他人已经注意到的那样,垃圾可能是欧姆输入之后的换行符。
解决这个问题的一些想法:
http://www.velocityreviews.com/forums/t436518-get-rid-of-trailing-newline-for-scanf.html
scanf(“%c",&input); (前导空格将占用输入中的空白)
发布于 2013-07-29 06:55:07
scanf("%d", &ohm);在这里,当您输入一个数字并按ENTER键时,这个数字由scanf处理,但是换行符仍然在输入缓冲区中,然后在后面
printf("Do you want to continue Yes (Y) or No (N): \n");
scanf("%c", &check);check实际上会存储换行符,而不是'N',
if(check=='N' || check=='n')
{
printf("Thanks for using the program");
flag = 1;
}因此,flag不会设置为1,while循环将再次继续。在第二个循环中,可以为check分配'N',循环将在之后终止。
https://stackoverflow.com/questions/17917638
复制相似问题