【发布时间】:2016-10-20 06:53:02
【问题描述】:
我在 C 中有以下代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *buf;
buf = malloc(sizeof(char) * 512);
while(strcmp(buf, "Exit!") != 0 )
{
printf("Enter something:");
fgets(buf, sizeof(char) * 512, stdin);
printf("You entered %s\n", buf);
printf("%d\n", strcmp(buf, "Exit!"));
}
}
我想要的行为是让while 循环在用户输入指定的string 时终止。据我了解,我可以使用char 指针在C 中表示string。我使用fgets() 存储用户输入并使用strcmp() 函数进行比较。我添加了一个调试语句,它打印出这个比较的结果,当我输入“退出!”时它返回一个正整数。这应该终止while循环。
有人可以解释我缺少什么吗?我相信这与换行符或 C 字符串终止符 \0 有关。当用户输入“退出”时,如何让 while 循环终止?
【问题讨论】:
-
fgets读取并包含其读取的每一行的结尾'\n'。 -
如果
fgets返回NULL,您还应该break循环。如果没有该检查,如果用户按下生成EOF的组合键,代码将进入无限循环。该组合键在 unix 系统上是 control-D,在 windows 上是 control-Z。 -
另外,在
malloc之后,你应该有buf[0] = '\0';这行,这避免了malloc返回的缓冲区包含字符串"Exit!"的(极不可能的)机会
标签: c string while-loop strcmp