我需要读取从标准输入到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。

最佳答案

使用EOF处理getchar的方法如下:

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


此代码将在stdout上复制其输入。

如果要一次处理整行,最简单的方法是使用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 - C:如何从标准输入中读取许多字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52127518/

10-12 00:18
查看更多