【问题标题】:C: How do you limit user input to 2 arguments separated by a space?C:您如何将用户输入限制为由空格分隔的 2 个参数?
【发布时间】: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


【解决方案1】:

忽略意外输入的最简单方法..

在读取任何预期/可选输入后,只需循环调用 getchar() 直到读取 '\n' 字符。

鉴于您的ls 输入。那可能是:

  1. ls
  2. ls -al
  3. ls -al myfile
  4. 和其他几种可能性

作为第二个例子cp

  1. cp 文件名1 目录名
  2. cp 文件名1 文件名2 目录名
  3. cp -a --attributes-only --backup -force filename1 filename2
  4. 和其他几种可能性

这表示只有1或2个字符串的前提是无效的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多