【发布时间】:2021-07-09 20:18:43
【问题描述】:
大家下午好,我正在为一个虚拟 shell 程序在 C 中标记输入,我遇到了无限循环的问题。在我的示例代码中,workwithtokenstuff() 正在无限执行。我之前形成了类似的循环,我不确定为什么底部的 scanf 被跳过了。示例输入是“cd /dummydir”。我有另一个strtok() 调用将目录拆分为另一个字符数组。
char inStr[255];
char *token;
scanf("%[^\n\r]", inStr);
token = strtok(inStr, " ");
while (strcmp(token, "exitcom") != 0) {
workwithtokenstuff();
scanf("%[^\n\r]", inStr);
token = strtok(inStr, " ");
}
【问题讨论】:
-
workwithtokenstuff()在做什么?知道这一点可能很重要。 -
scanf(" %[^\n\r]", inStr);(注意' '在'['之前) 为什么?"%[..]"不会丢弃前导空格。您应该验证每个输入,例如if (scanf(" %[^\n\r]", inStr) != 1) { /* handle EOF */ }
标签: c scanf infinite-loop strtok strcmp