我在 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 语句中时,我也尝试过使用它,但它工作正常。我不确定我做错了什么。
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);
}