Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言处理用户输入_C_String_Input - Fatal编程技术网

用C语言处理用户输入

用C语言处理用户输入,c,string,input,C,String,Input,在C语言中,我正在编写一个程序,它接收用户输入,而不是比较用户输入,以确定应该使用哪个输出。我觉得这很有问题,不知道是否有人能帮我一把。到目前为止,我已经: while(cmd[0] != EOF){ fgets(cmd, sizeof(cmd), stdin); /** Takes in user input and stores it in cmd **/ if(cmd[0] == '\n') printf("%s> ", cwd); e

在C语言中,我正在编写一个程序,它接收用户输入,而不是比较用户输入,以确定应该使用哪个输出。我觉得这很有问题,不知道是否有人能帮我一把。到目前为止,我已经:

while(cmd[0] != EOF){
     fgets(cmd, sizeof(cmd), stdin); /** Takes in user input and stores it in cmd **/
     if(cmd[0] == '\n')
         printf("%s> ", cwd);
     else if(strcmp(cmd, "ls") == 0)
         printf("I will list everything");
}
有什么想法吗? 基本上,它只是忽略任何用户输入时,有一些


另外,变量cwd只是一个字符串。

我想你需要问一个更具体的问题。我可以看到几个问题:

  • strcmp()
    调用
    fgets()
    将保留输入行中的换行符(如果有)。如果您的程序看起来像是在实现命令行shell,那么与“ls”进行比较可能永远不会是真的-您需要使用
    strncmp()
    或将
    \n
    包含在要进行比较的字符串中

  • 您没有从
    fgets()
    调用中检查返回状态-如果有人在您的提示下键入了一些错误的控制字符,您可能希望这样做以避免灾难

  • 正如我上面提到的,您的程序看起来有点像一个命令shell。如果是这种情况,则只有当用户输入一个空行作为输入时,您的提示(即
    %s>“
    ,对吗?)才会打印出来。您可能希望每次循环时都打印出提示

  • 您如何期望
    cmd[0]
    成为
    EOF
    来完成循环?
    fgets()
    手册页显示:

    成功完成后,
    fgets()
    gets()
    返回指向字符串的指针。如果在读取任何字符之前出现文件结尾,则它们返回NULL,并且缓冲区内容保持不变

    在我看来,使用
    fgets()
    ,您永远无法在缓冲区中获取
    EOF


  • 您遇到了什么样的问题?基本上,它忽略了除新行之外的任何用户输入。@Michael Dillon-如果声明为
    char cmd[128],则非常有意义。如果它是一个动态数组,那么你是对的。@Chris-问题的关键是它根本没有在问题中声明。sizeof应该只用于完全定义的类型,我们看不出char*cmd是否完全定义。