C++ 如何防止我的输入在程序继续时跳转到其他函数

C++ 如何防止我的输入在程序继续时跳转到其他函数,c++,c,C++,C,我的问题是,当我输入超过1个数字或字符(例如:156)时,值56直接进入下一个函数(f1、f2)。我怎样才能防止这一点,并打印出这是一个错误?(注:我是新来的,所以如果你们能在不使用iostream的情况下帮助我,那就太好了 char c; printf("menu"); printf("Please enter the option 1 - 4, press q to quit\n"); input_c: scanf("%c",&c); do{

我的问题是,当我输入超过1个数字或字符(例如:156)时,值56直接进入下一个函数(f1、f2)。我怎样才能防止这一点,并打印出这是一个错误?(注:我是新来的,所以如果你们能在不使用iostream的情况下帮助我,那就太好了

char c;
printf("menu");
printf("Please enter the option 1 - 4, press q to quit\n");
input_c:            
scanf("%c",&c);
do{         
switch (c)          
case '1': f1();
break;
case '2': f2();
break;
case 'q': quit();
break;
default: goto input_c;
break;
}

我将其编辑为我的原始代码,这导致我在
char c[2];
声明中遇到相同的问题,
c
是一个由索引0到1的2个字符组成的数组。因此,在读取输入时,应使用
scanf(“%c”,&c[i])

在语句
开关(c[2])
中不能将数组索引用作2,因为数组索引从
c
中的
0
开始

main() {
char c; 
scanf("%c", &c);
switch(c) {
   case '1': f1(); break;
   case '2': f2(); break;
   case 'q': quit(); break;
   default: //blah
}

可以简单地使用上述方法。

此行为的原因是您声明了一个字符数组[2],并且只使用了其中一个元素(第一个)。因此,当您输入145时,它只接受1,这就是它进入第一个函数的原因。

您正在读取一个字符,因此,上面的strlen不正确,将产生未定义的行为。其次,数组大小为2,因此您可以按0和1对其进行索引。
c[2]
可以再次调用未定义的行为

只需使用一个简单的字符变量,将
goto
替换为
while

char c;

while(true)
{
    scanf("%c",&c); // cin >> c;

    switch (c)
    {
    case '1':
        f1();
        break;
    case '2':
        f2();
        break;
    case 'q':
        quit();
        break;
    }
}

首先,为什么要声明一个2大小的数组(
c
),然后只使用其中一个元素?其次,不建议经常使用
goto
。这是我编写菜单的原始代码,但由于它一直跳转到函数f1,我尝试使用w/array(这会产生相同的问题)我做了以上三件事,但问题仍然存在。