我做了这段代码:
虽然它通常工作得非常好,但当我插入例如“1f1”时,它接受了“1”并且没有报错,当我插入“f1f1f”时,它读取了两次并破坏了第二次读取/扫描等等(即第一次读取打印出“无效输入,仅插入整数”,而不是等待用户重新阅读第一次读取,它继续到第二次读取并再次打印出“无效输入,仅插入整数”...)
它需要一个最后的修饰,我已经阅读了很多答案,但找不到它。
/*here is the main function*/
int x , y=0, returned_value;
int *p = &x;
while (y<5){
printf("Please Insert X value\n");
returned_value = scanf ("%d" , p);
validate_input(returned_value, p);
y++;
}
这个函数:
void validate_input(int returned_value, int *p){
getchar();
while (returned_value!=1){
printf("invalid input, Insert Integers Only\n");
getchar();
returned_value = scanf("%d", p);
}
}
虽然它通常工作得非常好,但当我插入例如“1f1”时,它接受了“1”并且没有报错,当我插入“f1f1f”时,它读取了两次并破坏了第二次读取/扫描等等(即第一次读取打印出“无效输入,仅插入整数”,而不是等待用户重新阅读第一次读取,它继续到第二次读取并再次打印出“无效输入,仅插入整数”...)
它需要一个最后的修饰,我已经阅读了很多答案,但找不到它。
validate_input()
返回值为EOF,则会出现无限递归。 - chux - Reinstate Monica1f1
作为有效输入,则使用scanf
是错误的函数。 - Support Ukrainescanf()
,建议如何测试输入是否合理。 - chux - Reinstate Monica