我需要从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。
以下是你用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
,你可以编写自己的(使用getchar
和realloc
)。