C:如何从标准输入读取多个字符串

标签 c scanf stdin eof

我需要读取许多长度可变的字符串,从 stdin 到 EOF。 字符串由连续的字符组成,不以空格分隔,并且字符串没有最大长度。

使用:

char st[101];
while(scanf("%100s",st) != EOF){ //divide the input into parts of 100 chars
    int i;
    for(i=0; i<strlen(st);i++){
        printf("%c",st[i]);
    }
}

我无法判断当前字符串是前一个字符串的一部分还是新字符串的一部分,因为它全部打印在一行中(而且我不知道在哪里打印“\n”)。

示例输入:

aaaaaaaaa[...]aaaaa

bbbbbbbbb[...]bbbbb

输出:

aaaa[...]aabbbbbb[...]bbbb

有什么解决办法吗?

附注使用 getchar() 我无法处理 EOF。

最佳答案

以下是如何使用 getchar 处理 EOF:

int c;
while ((c = getchar()) != EOF) {
    putchar(c);
}

此代码将在标准输出上复制其输入。

如果您想一次处理整行,最简单的方法是使用 getline (如果有)(它是 POSIX,而不是标准 C):

char *line = NULL;
size_t size = 0;

ssize_t nread;
while ((nread = getline(&line, &size, stdin)) != -1) {
    // nread characters were read
    do_stuff_with(line);
}
free(line);

如果您没有 getline,您可以编写自己的(使用 getcharrealloc)。

关于C:如何从标准输入读取多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52127518/

相关文章:

c - 在 Linux 中调试一个简单的字符驱动程序在 device_create() 上失败

multithreading - stdin、stdout 和 stderr 是共享的吗?

C++ 确保绝对没有标准输入缓冲

c - 我在使用 C 语言中的扫描函数时遇到问题

c - scanf 和 fgets 的问题

c - execvp - 处理带有转义空格的 arg

c - 拆分两位数

c - 了解 fgets() 函数

parsing - 为什么在 Go 中使用 := with fmt. Scanf 总是返回 1?

c++ - C++ 的新手和 scanf 没有正确读取/打印输入