C语言 为什么我的默认case语句在允许我扫描之前重复两次?



我在下面放了一个小函数来检查用户类型是哪个字符。'y'和'n'工作得很好,但我有点困惑,为什么我的c代码重复两次,然后允许我再次键入,当我输入一个不同的字符,我把我的默认语句。

int any_size_array ()   {
int a=19;
int numb_array [] = {a,22,13,132,153,600};
printf("do you want to add more numbers to the array?t");
char user;
scanf("%c", &user);
switch(user)    {
case 'y':
printf("user typed %cn", user);
break;
case 'n':
printf("user typed %cn", user);
break;
default:
printf("please try againn");
any_size_array();
}

因为n是一个字符,而%c不使用它。如果您想跳过空白,请尝试scanf(" %c", &user)

同样,您必须总是检查scanf返回的值。如果scanf没有修改user的值,那么您的程序通过尝试从未初始化的变量中读取来调用未定义行为。试一试:

if( scanf(" %c", &user) == 1 ) { ... }
  1. 不要使用递归。每次调用any_size_array()函数时,所有变量都会重新创建,并且不相关。使用循环。

  2. 您输入的字符比输入的字符多。(以新行为例)

最新更新