我知道这可能是一个全新的问题(我很长一段时间没有接触过C),但有人可以告诉我为什么这不起作用吗?
printf("Enter command: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
if (strcmp(buffer, "exit") == 0)
return 0;
Run Code Online (Sandbox Code Playgroud)
如果我输入"exit"它不会输入if,它是否与"buffer"的长度有关?
有什么建议?
pou*_*def 22
你想这样做:
strcmp(buffer, "exit\n")
也就是说,当您输入字符串并按"输入"时,换行符将成为其中的一部分buffer.
或者,使用strncmp(),它只比较字符串的n个字符
fgets()返回字符串"exit \n" - 与gets()不同,它保留换行符.
正如其他人所说,与"exit"失败相比,因为fgets()在缓冲区中包含换行符.它的一个保证是缓冲区将以换行符结束,除非输入的行对于缓冲区来说太长,在这种情况下它不会以换行符结束.fgets()还保证缓冲区是nul终止的,所以你不需要零256字节,但只允许fgets()使用255来获得保证.
比较完全"exit\n"要求用户不会在单词之前或之后意外添加空格的简单答案.如果你想强迫用户小心退出命令,这可能无关紧要,但一般来说可能是用户烦恼的根源.
使用strncmp()可能允许"exited","exit42"以及更多匹配您可能不想要它们的位置.这可能会对您不利,特别是如果某些有效命令是其他有效命令的前缀字符串.
在一般情况下,将I/O,标记化,解析和操作分离到各自的阶段通常是个好主意.