我听说这些也很危险。我用一个简单地让“有效输入”检查变得容易。这是代码
char info_check = 'q';
while (info_check != 'y') {
Quadratic* eqn=newquadratic();
printf("\nThe coefficients entered for '%s' are a=%g, b=%g and c=%g.\n", eqn->name_or_descrpt, eqn->a, eqn->b, eqn->c);
printf("\nIs this information correct? (y/n): ");
get_valid_option:
scanf("%c", info_check);
if (info_check != 'n' || info_check != 'y') {
printf("\n\nInvalid choice! Please input either y or n: ");
goto get_valid_option;
}
}
在我认为是无害的添加goto语句之前,代码运行良好。奇怪的是,错误发生在goto标记之前,并且它不会打印第二个printf。发生了什么事?
答案 0 :(得分:2)
&
info_check
之前您错过了scanf
运营商。
scanf(" %c", &info_check);
并在%c
说明符之前放置一个空格,以吃掉之前\n
遗留下来的换行符(scanf
)。