C语言:输入\之类的话 for语句会一直往下循环输出,如何终止?

#include <stdio.h>
int main()
{
int a, b,i;
srand((unsigned)time(NULL));//使用时间作为参数来生成随机数
a = rand() % 100 + 1;
printf("《C语言程序设计》翻转课堂—猜数游戏\n欢迎来到猜数游戏\n游戏说明:该程序将会生成1~100之间的整数,然后就由您负责猜数,同样也要输入1~100之间的整数,不许耍赖哦!\n");//对游戏进行说明
for (i =1; i >0; i++)
{
printf(" 请输入你想要猜的数字:");
scanf("%d", &b);
if (b == 0)
{
printf(" 感谢您的游玩,期待下次能再与你相遇^O^\n");
break;
}
if (b > 100 || b < 1)
{
printf("\n不许耍赖乱输数字,你到底想不想赢 ̄へ ̄\n");
}
else
{
if (a == b)
printf("\n恭喜您猜对啦!!!o(^▽^)o\n本次程序的随机数就是%d\n", a);
else
printf("\n抱歉您没有猜对(╥╯^╰╥)\n本次程序的随机数是%d\n", a);
printf("本次游戏结束啦,喜欢的话可以继续^O^,如果不想玩了输入0就可以退出哦\n");
}
}
printf("\n\n\t\t\t\t\t\t\t\t\t\t\t编写成员:杨天晟、付京华");
return 0;
}

输入\之类的话 for语句会一直往下循环输出,是因为程序需要读入一个整数,但是输入的非法字符会一直停留在输入缓冲区中,要想终止,可以按下Ctrl+Break终止循环。

正面的程序已经帮你改好了:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main()

{ int a, b,i;

  srand((unsigned)time(NULL));//使用时间作为参数来生成随机数

  a = rand() % 100 + 1;

  printf("《C语言程序设计》翻转课堂—猜数游戏\n欢迎来到猜数游戏\n游戏说明:该程序将会生成1~100之间的整数,然后就由您负责猜数,同样也要输入1~100之间的整数,不许耍赖哦!\n");//对游戏进行说明

  for (i =1; i >0; i++)

  { fflush(stdin);

    printf(" 请输入你想要猜的数字:");

    scanf("%d", &b);

    if (b == 0)

    { printf(" 感谢您的游玩,期待下次能再与你相遇^O^\n");

      break;

    }

    if (b > 100 || b < 1)

    { printf("\n不许耍赖乱输数字,你到底想不想赢 ̄へ ̄\n");

      fflush(stdin);

    }

    else

    { if (a == b)

        printf("\n恭喜您猜对啦!!!o(^▽^)o\n本次程序的随机数就是%d\n", a);

      else

        printf("\n抱歉您没有猜对(╥╯^╰╥)\n本次程序的随机数是%d\n", a);

      printf("本次游戏结束啦,喜欢的话可以继续^O^,如果不想玩了输入0就可以退出哦\n");

    }

  }

  printf("\n\n\t\t\t\t\t\t\t\t\t\t\t编写成员:杨天晟、付京华");

  return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-15

C语言程序如果在控制台运行可以使用,Ctrl + C这两个组合键终止程序。

这段代码主要没有考虑输入不是数字的情况,把图中红色框内代码替换成下面代码即可:

if(scanf("%d", &b) != 1)

{

printf("请输入数字!\n");

while(getchar()!='\n');//去除字符

continue;

}

第2个回答  2021-11-16
判断scanf的返回值,如果是1才执行你的判断
否则表示输入的不是数字
这时需要把输入的错误内容清空,比较常见的做法是
while(getchar()!='\n')
{}
第3个回答  2021-11-15
scanf("%d", &b);这个要求必须输入数字,要想输入字符串,必须用字符串输入%s,然后进行类型检查,转换为数字
第4个回答  2021-11-15
不要轻易被影响,也别太过有理智。人不能活得太明白,心里知道就好。
相似回答