在C语言中扫描包括空格在内的字符串

3
在我的代码中:
scanf("%s", &text);
printf("%s\n", text);

输入:

hi how are you

输出:

hi

而不是

hi how are you

我该怎么做才能修复它?
3个回答

3

请查看fgets

fgets()函数从给定的流中最多读取n个字符减1,并将它们存储在字符串s中。当发现换行符、文件末尾或出错时,阅读停止。如果有换行符,则保留该字符。如果读取任何字符并且没有错误,则添加`\ 0'字符以结束字符串。


1

我想你是在寻找

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

这将读取直到换行符为止。或者,如果您使用其他分隔符

ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);

只有在Linux或其他使用GNU libc的系统上,“getline()”和“getdelim()”均为GNU扩展。它们自libc 4.6.27版本以来就可用。(http://linux.die.net/man/3/getline) - The Archetypal Paul
@Paul;曾经是GNU的扩展,现在已成为POSIX.1-2008的一部分。 - falstro
谢谢。我需要阅读一下相关资料——它被广泛实现了吗? - The Archetypal Paul

1

使用fgets获取您的输入:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    char text[80];
    fgets(text, sizeof(text), stdin);
    printf("%s\n", text);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接