我在while循环中声明t[1] = "a"
并拥有gets(t)
,每次循环都会检查条件t != "Q"
。
#include <stdio.h>
int main(void)
{
char t[1] = "a";
printf("Enter a character or 'Q' to quit.");
while (t != "Q")
{
gets(t);
printf("%s\n", t);
}
return(0);
}
即使我输入Q并按回车键,程序也会保持循环。
答案 0 :(得分:2)
您的计划有几个问题。
char t[1] = "a";
string 由一系列以空字符'\0'
结尾的字符组成。您还没有在t
留出足够的空间来容纳字符'a'
加上终止'\0'
。由于特殊规则,这只会在'a'
中存储字符t[0]
;此t
不包含字符串。
while (t != "Q")
这是您所看到问题的最直接原因。 C不支持字符串或数组的相等比较。数组表达式通常会衰减&#34;指向其第一个元素的指针。这会将t
的第一个元素的地址与字符串文字"Q"
的第一个元素的地址进行比较。显然他们永远不会平等。
gets(t);
切勿使用gets
功能。它本质上是不安全的;它不允许您指定目标数组的长度,因此您无法避免写入数组的末尾。由于t
只有一个元素长,因此将溢出(除非您键入空行)。
对于您正在做的事情,您可能希望一次只读取一个字符,可能使用getchar()
。请注意,getchar()
会返回int
,而不是char
;它返回EOF
以指示文件结束。例如,如果您输入Q
后跟Enter,则对getchar()
的两次调用将返回'Q'
和'\n'
。
答案 1 :(得分:0)
t
代表数组的地址。所以你要将地址与字符串进行比较。使用t [0]!='Q'或strcmp(t,“Q”)!= 0。