在 switch 语句中标记字符串 - C

问题描述 投票:0回答:1

我在 switch 语句中使用 strtok 时遇到了很多麻烦。这是代码

int main(int argc, char *argv[]) {

  char phrase[256];
  printf("type a phrase to examine\n\n");
  fgets(phrase, 256, stdin);

  printf("phrase: %s\n", phrase);

  int opt;

  while ((opt = getopt(argc, argv, "l")) != -1) {
     switch (opt) {
     case 'l':
         //prints all words as a list
         char *token = strtok(phrase, " ");

         while (token != NULL) {
             printf("%s\n", token);
             token = strtok(NULL, " ");
             break;
         }
     }
 }
 return 0;
}

打印时,它只显示第一个单词,但空格后面没有其他内容

当 strtok 不在 switch 语句中时,我也尝试过使用它,但它工作正常。我不确定我做错了什么。

c switch-statement strtok
1个回答
0
投票

break;
语句应该在
while
循环之外。如果您正确缩进了源代码,您应该已经意识到自己(不过,我编辑了您的问题,以使其更加明显)。

第一次通过循环后,您会得到

break;
并退出循环,而不是退出
switch
语句。

         //prints all words as a list
         char *token = strtok(phrase, " ");

         while (token != NULL) {
             printf("%s\n", token);
             token = strtok(NULL, " ");
         }
         break;

会做得更好。

恕我直言,有一种更易读的方法,它允许您使用

for
循环:

         //prints all words as a list
         for (char *token = strtok(phrase, " ");
              token != NULL;
              token = strtok(NULL, " "))
         {
             printf("%s\n", token);
         }
© www.soinside.com 2019 - 2024. All rights reserved.