提问人:imaginary flower 提问时间:10/26/2023 最后编辑:Luis Coloradoimaginary flower 更新时间:10/27/2023 访问量:51
在 switch 语句中标记字符串 - C
Tokenizing a string inside a switch statement - C
问:
我在 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;
}
当它打印时,它只显示第一个单词,但在空格之后没有其他内容
我还尝试过在 Switch 语句中不使用 strtok,但它工作正常。我不确定我做错了什么。
答:
0赞
Luis Colorado
10/27/2023
#1
该语句应该在循环之外。你应该已经意识到自己是否正确地缩进了来源(我编辑了你的问题,以使其更明显,虽然)。break;
while
在第一次通过循环后,你得到 和 你离开循环,而不是退出语句。break;
switch
case 'l':
//prints all words as a list
char *token = strtok(phrase, " ");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " ");
}
break; /* now the break gets out of the switch */
会做得更好。
恕我直言,有一种更具可读性的方法,可以让您使用循环:for
//prints all words as a list
for (char *token = strtok(phrase, " ");
token != NULL;
token = strtok(NULL, " "))
{
printf("%s\n", token);
}
评论
while
break
switch
if