我在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()
函数进行比较。我添加了一个调试语句,打印出这个比较的结果,当我输入“Exit!”时它返回一个正整数。应该终止while循环。
有人可以解释我错过了什么吗?我相信它与新的行字符或C-String终结符\0
有关。当用户输入“退出”时,如何让while循环终止?
答案 0 :(得分:1)
这是因为fgets
保留了从键盘输入的newline
,或者标记了文本文件中该行的结尾。
删除它的一种简单方法是:
#include <string.h>
//...
buf [ strcspn(buf, "\r\n") ] = 0; // remove trailing newline etc