C 输入字符不能正确读取
这应该是一个简单的错误。我的代码基本上是读取一个用户输入值,如果该值大于0,它将返回该值。如果没有,它将打印一个错误并再次请求值。唯一的问题是,当输入一个新值时,它会使用旧的假值而不会出错C 输入字符不能正确读取,c,function,if-statement,C,Function,If Statement,这应该是一个简单的错误。我的代码基本上是读取一个用户输入值,如果该值大于0,它将返回该值。如果没有,它将打印一个错误并再次请求值。唯一的问题是,当输入一个新值时,它会使用旧的假值而不会出错 int menuSize(int s) { printf(" Please Enter size: "); scanf("%i", &s); if (s>0) { } else { printf(" Invalid Input\n"); getchar(); menuSi
int menuSize(int s) {
printf(" Please Enter size: ");
scanf("%i", &s);
if (s>0) {
}
else {
printf(" Invalid Input\n");
getchar();
menuSize(s);
}
return s;
}
如果输入无效,则函数对自身进行递归调用,但不对递归调用的返回值执行任何操作。这意味着将返回当前调用中读取的无效值 更改函数以返回递归调用的值。另外,由于未使用函数的参数,请将其删除,并将
s
设置为本地。您还应该将s
初始化为某个已知值,并检查scanf
的返回值,以防未读取任何内容
int menuSize(void)
{
int s = -1;
printf(" Please Enter size: ");
int rval = scanf("%i", &s);
if (rval == 1 && s>0) {
return s;
} else {
printf(" Invalid Input\n");
getchar();
return menuSize();
}
}
因为它是递归的,所以您最好使用
menuSize
recursive调用的返回值来执行一些操作(比如将它分配给s并返回它)。此外,我没有看到将s
作为参数传递的点。一般来说,递归不是这里使用的正确技术。改为使用循环。scanf()
不检查返回值。。。这里的问题不大,因为函数的参数是s
,但这通常是等待发生的未定义行为,因为如果用户输入了字符串以外的内容,则不会初始化本地s
。这也可能是你的问题所在。你不知道。getchar()当rval==1&&s@chux-Monica OP表示,他们希望输入一个大于0的值,因此不读取任何值或OP的代码有else{
,因此在sMight想要在EOF
上中断递归时输入。