我一直用C ++编写代码,完全用C语言编写。 为什么它不起作用?我想通过键入exit
来结束程序#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char command[4];
do{
printf( " -> " ) ;
scanf("%c", &command);
}while(&command != "exit");
return 0;
}
答案 0 :(得分:3)
因为在C中你必须使用strcmp
进行字符串比较。
在C中,字符串是一个字符序列,以'\0'
- 终止字节结尾,其值为0.
字符串"exit"
在内存中看起来像这样:
+-----+-----+-----+-----+------+
| 'e' | 'x' | 'i' | 't' | '\0' |
+-----+-----+-----+-----+------+
where 'e' == 101, 'x' == 120, etc.
字符的值由ASCII Table的代码确定。
&command != "exit"
只是比较指针。
while(strcmp(command, "exit") != 0);
是正确的。当两个字符串相等时,strcmp
返回0,非零
另有价值。参见
man strcmp
#include <string.h> int strcmp(const char *s1, const char *s2);
<强>描述强>
strcmp()
函数会比较两个字符串s1
和s2
。如果s1
,则返回小于,等于或大于零的整数 分别发现小于,匹配或大于s2
。
但你又犯了一个错误:
scanf("%c", &command);
此处您只阅读1个字符,此command
不是字符串。
scanf("%s", command);
是正确的。
下一个错误是
char command[4];
这可以包含最大长度为3个字符的字符串,因此"exit"
不会
适合缓冲区。
成功
char command[1024];
然后你可以存储一个最大的字符串。长度为1023字节。
通常,要保存长度为n
的字符串,您需要一个char
数组
至少n+1
维度。
答案 1 :(得分:0)
显然使用strcmp
:
while (strcmp(c, "exit"))
您的代码所做的是将输入缓冲区的地址与静态字符串"exit"
的地址进行比较,这当然永远不会匹配。您必须比较指示符。
orher问题是你有一个四字节缓冲区用于五字节字符串,终结符需要适合。 C这种方式非常棘手,你需要分配一个足够大的&#34;&#34;任何人可能输入的缓冲区或程序将立即崩溃。对测试程序使用1024或者相当大的东西。
现在我说&#34;显然&#34;因为在编写C代码时,您应始终打开C standard library reference以确保您使用正确的函数和参数,并了解您可以使用的工具。
答案 2 :(得分:0)
代码的多个问题
\0
。%s
输入字符串。 %c
代表字符strcmp
来比较字符串。