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



>我需要读取许多长度可变的字符串,从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]);
}
}

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

示例输入

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(。

最新更新