【发布时间】:2016-02-01 23:41:46
【问题描述】:
我正在尝试构建目录树。
如何将用户输入限制为由空格分隔的 1-2 个字符串?
用户输入示例:
mkdir directory1(2个字符串:一个命令一个参数)
ls(1 个字符串:一个命令)
一些想法:
标记化用户输入 AND
分隔符用于检查新字符串的空格
OR 指针来遍历字符串的char元素?
但是你如何处理第三个字符串,例如if (string_count > 2) {错误信息}
#include <stdio.h> /* For fgets(), fprintf() and printf() */
#include <stdlib.h> /* For EXIT_FAILURE */
#include <ctype.h> /* For isspace() */
// COMMANDS
char exit[4] = "exit";
char list[2] = "ls";
char commandDirectory[2] = "cd";
char makeDirectory[5] = "mkdir";
char removeDirectory[5] = "rmdir";
char directoryName[129] = "";
int userInput() {
char string[130];
printf("> \n");
printf("Input a string: ");
if (fgets(string, sizeof(string), stdin) == NULL) {
fprintf(stderr, "Please enter at least one argument\n");
}
else
{
char *pointer;
pointer = string;
while (isspace((unsigned char) *pointer) != 0)
pointer++;
if (*pointer == '\0') {
fprintf(stderr, "Please enter at least one argument\n");
}
printf("%s", string);
}
return 0;
}
int main(void) {
userInput();
}
【问题讨论】:
-
在
char makeDirectory[5] = "mkdir";等中,不会包含'\0'字符串终止符,因为您限制了数组长度。更好的是char makeDirectory[] = "mkdir"; -
使用
strtok函数标记输入。 -
fgets(string, sizeof(string), stdin)是正确的第一步。 -
我喜欢 (1) 读取一行,(2) 将其分解为一个由空格分隔的“单词”数组(使用类似
strtok),(3) 看看第一个单词是我认识的单词(“mkdir”、“ls”等),然后最后(4)查看我得到的单词数,如果它不适合当前命令,请抱怨。
标签: c exception-handling user-input delimiter