用C语言处理用户输入
在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
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()
调用中检查返回状态-如果有人在您的提示下键入了一些错误的控制字符,您可能希望这样做以避免灾难%s>“
,对吗?)才会打印出来。您可能希望每次循环时都打印出提示cmd[0]
成为EOF
来完成循环?fgets()
手册页显示:
成功完成后,fgets()
和gets()
返回指向字符串的指针。如果在读取任何字符之前出现文件结尾,则它们返回NULL,并且缓冲区内容保持不变
在我看来,使用fgets()
,您永远无法在缓冲区中获取EOF
您遇到了什么样的问题?基本上,它忽略了除新行之外的任何用户输入。@Michael Dillon-如果声明为
char cmd[128],则非常有意义代码>。如果它是一个动态数组,那么你是对的。@Chris-问题的关键是它根本没有在问题中声明。sizeof应该只用于完全定义的类型,我们看不出char*cmd是否完全定义。