无法跳出死循环
Can't get out of an infinite loop
我做了一个简单的练习,我必须问一些数学问题,用户需要使用整数值来回答,我做了所有的事情,除了当使用整数以外的东西时我得到一个无限循环...我可以使用中断来停止它,但我希望能够再次要求用户输入一个整数。
这是代码,(我使用这个网站来测试我的代码 [https://repl.it/languages])如果我能对它有所了解那就太棒了!谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char ft_op()
{
srand(time(NULL));
char lop[4] = "+-/*";
int rop = rand() % 4;
char op = lop[rop];
return op;
}
int ft_result(int nb1, int nb2, char op)
{
int result = 0;
if (op == '+')
result = nb1 + nb2;
else if (op == '-')
result = nb1 - nb2;
else if (op == '/')
result = nb1 / nb2;
else
result = nb1 * nb2;
return result;
}
int main(void)
{
srand(time(NULL));
int nb1;
int nb2;
char op;
int uresult;
int result;
int nbq = 1;
int grade = 0;
while (nbq < 11)
{
nb1 = rand()%101;
nb2 = rand()%101;
op = ft_op();
result = ft_result(nb1,nb2,op);
printf("\nQuestion %d : Calculez %d %c %d = ",nbq, nb1, op, nb2);
if (scanf("%d", &uresult) != 1)
{
printf("\nErreur de saisie. Veuillez recommencer.\n");
break;
}
else
{
nbq = nbq + 1;
if (result == uresult)
{
grade = grade + 1;
printf("\nBravo vous avez deviné juste !\n");
}
else
printf("\nPas de chance, votre résultat est %d et le bon résultat %d\n",uresult, result);
}
}
printf("\nVotre note finale est de %d/10", grade);
return 0;
}
当输入不是数字时,您需要clear/absorb输入流。
int c
while ((c = getchar()) != '\n' && c != EOF);
上面的循环将不断从输入中获取 char
,直到它找到一个新行或 EOF(文件结尾)。它不需要对输入做任何事情,所以没有正文块。
将break;
替换为continue;
if (scanf("%d", &uresult) != 1) {
printf("\nErreur de saisie. Veuillez recommencer.\n");
int c
while ((c = getchar()) != '\n' && c != EOF);
continue;
}
我做了一个简单的练习,我必须问一些数学问题,用户需要使用整数值来回答,我做了所有的事情,除了当使用整数以外的东西时我得到一个无限循环...我可以使用中断来停止它,但我希望能够再次要求用户输入一个整数。
这是代码,(我使用这个网站来测试我的代码 [https://repl.it/languages])如果我能对它有所了解那就太棒了!谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char ft_op()
{
srand(time(NULL));
char lop[4] = "+-/*";
int rop = rand() % 4;
char op = lop[rop];
return op;
}
int ft_result(int nb1, int nb2, char op)
{
int result = 0;
if (op == '+')
result = nb1 + nb2;
else if (op == '-')
result = nb1 - nb2;
else if (op == '/')
result = nb1 / nb2;
else
result = nb1 * nb2;
return result;
}
int main(void)
{
srand(time(NULL));
int nb1;
int nb2;
char op;
int uresult;
int result;
int nbq = 1;
int grade = 0;
while (nbq < 11)
{
nb1 = rand()%101;
nb2 = rand()%101;
op = ft_op();
result = ft_result(nb1,nb2,op);
printf("\nQuestion %d : Calculez %d %c %d = ",nbq, nb1, op, nb2);
if (scanf("%d", &uresult) != 1)
{
printf("\nErreur de saisie. Veuillez recommencer.\n");
break;
}
else
{
nbq = nbq + 1;
if (result == uresult)
{
grade = grade + 1;
printf("\nBravo vous avez deviné juste !\n");
}
else
printf("\nPas de chance, votre résultat est %d et le bon résultat %d\n",uresult, result);
}
}
printf("\nVotre note finale est de %d/10", grade);
return 0;
}
当输入不是数字时,您需要clear/absorb输入流。
int c
while ((c = getchar()) != '\n' && c != EOF);
上面的循环将不断从输入中获取 char
,直到它找到一个新行或 EOF(文件结尾)。它不需要对输入做任何事情,所以没有正文块。
将break;
替换为continue;
if (scanf("%d", &uresult) != 1) {
printf("\nErreur de saisie. Veuillez recommencer.\n");
int c
while ((c = getchar()) != '\n' && c != EOF);
continue;
}