C开关无法识别字符串

时间:2018-01-05 16:15:56

标签: c switch-statement

我试图以字符串的形式接受用户输入,然后在交换机中使用它,但它总是使用默认情况而不是我输入的字符串的情况。出于测试的目的,我只输入字母y:

  char thing[1];
  scanf("%s",thing);
  switch(thing){
    case 'y' :
      printf("yup\n");
      break;
    default :
      printf("nope\n");
  }

1 个答案:

答案 0 :(得分:1)

这个char数组有一个元素。你的代码在这里为char而哭泣。您可以使用char做得很好,然后获取输入并进行检查。同样在switch中,您使用的指针值与char之类的y不匹配。去默认。

char thing;
if(scanf("%c",&thing) != 1){
   // error
}
..

如果你想使用strcmp,请注意你需要使用null终止的char数组。

char thing[3];
if(scanf("%2s",thing)!= 1){
  // error
}

if(strcmp(thing,"y") == 0){
  printf("yup\n");
}
else{
  printf("nope\n");
}

此外,您可以使用您的代码完成此操作 - 但由于您无法将其用作null terminated char array或许多标准字符串处理功能所需的字符串,因此无效。

char thing[1];
if(scanf("%c",&thing[0]) != 1){
   // error
}
switch(thing[0]){
  case 'y' :
    printf("yup\n");
    break;
  default :
    printf("nope\n");
}