检查C字符串中的“行尾”

时间:2012-06-05 16:32:21

标签: c

我想从用户那里得到一个最大长度为30个字符串的输入,并检查它是否包含行尾。

这是我到目前为止所写的内容:

int main(void) {
int i;
char* command = (char*)calloc(31, sizeof(char));
while (0 < 1) {
    scanf("%s", command);
    for (i = 0; i <= strlen(command); ++i) {
        if (command[i] == '\n')
            printf("here");
    }
    if (strcmp(command, "quit") == 0)
        break;
}

想法是检查用户作为输入给出的命令是否是“合法的” - 长度&lt; 31。 当我运行这段代码时,无论输入的长度如何,它都不会打印“here”。

3 个答案:

答案 0 :(得分:5)

这是因为scanf()不包含换行符,它认为它是空格并使用空格来分隔它转换的值。只需使用strlen()的返回值。

答案 1 :(得分:5)

scanf不包含终止'\n',但fgets不会:

  

换行符使fgets停止读取,但它被认为是有效字符,因此它包含在复制到str的字符串中。

只需将scanf行更改为:

fgets(command, 31, stdin);

答案 2 :(得分:1)

使用fgets(有关man fgets的更多信息),您正在读取的流是stdin。

它看起来像这样:

fgets(command, 31, stdin);

在字符串的末尾(如果没有错误),您可以查找'\ 0'。它将附加到字符串的末尾(这就是为什么我使用31而不是30的大小)。

此外,您可以使用fgets从任何流中读取(即文件,错误等)。我建议学习它是如何工作的,因为它比scanf更灵活。

希望有所帮助。