当得到(t)从命令行输入“Q”时,为什么t!=“Q”在循环时停止?

时间:2014-12-07 02:19:42

标签: c character string-comparison gets

我在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并按回车键,程序也会保持循环。

2 个答案:

答案 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。