0

我的问题是当我输入超过 1 个数字或字符(例如:156)时,值 56 直接转到我的下一个函数( f1, f2 )。我怎样才能防止这种情况并打印出这是一个错误?(ps:我是新手,所以如果你们可以在不使用 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;
}

我将其编辑为我的原始代码,这导致我遇到同样的问题

4

3 回答 3

1

char c[2];声明中,c是一个由索引 0 到 1 的 2 个字符组成的数组。因此,在将输入读入其中时,scanf("%c", &c[i])应该使用它。

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

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

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

于 2013-11-10T11:19:24.223 回答
0

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

于 2013-11-10T11:26:07.217 回答
0

你正在阅读一个字符,所以strlen它是不正确的,并且会产生未定义的行为。其次,您的数组大小为 2,因此您可以按 0 和 1 对其进行索引。c[2]可以再次调用未定义的行为

只需使用一个简单的字符变量并替换gotowhile

char c;

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

    switch (c)
    {
    case '1':
        f1();
        break;
    case '2':
        f2();
        break;
    case 'q':
        quit();
        break;
    }
}
于 2013-11-10T11:26:21.317 回答