如何从c语言的标准输入中读取长度未知的字符流

如何从c语言的标准输入中读取长度未知的字符流,c,input,char,c-strings,C,Input,Char,C Strings,我想从标准输入中读取长度未知的字符流。我试着一个字一个字地读 #include <stdio.h> int main(void) { char ch; do { scanf("%c",&ch); //do some comparison of ch }while(ch!=''); return 0; } 你的转义字符是错误的。 你想把所有的东西都写在一行吗?然后使用“\n”结束循环 while (ch !=

我想从标准输入中读取长度未知的字符流。我试着一个字一个字地读

#include <stdio.h>
int main(void) 
{
    char ch;
    do 
    {
        scanf("%c",&ch);
        //do some comparison of ch
    }while(ch!='');
return 0;
}

你的转义字符是错误的。 你想把所有的东西都写在一行吗?然后使用“\n”结束循环

while (ch != '\n')
如果一个字符一个字符地写,请使用一个字符退出序列(例如“@”)


也许最简单的解决办法就是这样

#include <stdio.h>
int main(void) 
{
    char ch;
    do 
    {
        ch = fgetc(stdin); 
        //do some comparison of ch
    }while( ch != EOF );

return 0;
}
#包括
内部主(空)
{
char ch;
做
{
ch=fgetc(标准偏差);
//对ch做一些比较
}while(ch!=EOF);
返回0;
}
但话虽如此,问题陈述如下

从长度为的标准输入中读取字符流 不为人知

这有点棘手。根据上面的程序,您可能可以使用ctrl+d、EOF停止它,或者使用文件重定向运行二进制文件

/a.out

事实上,标准输入的解释使这个问题更有意义

您的意思是如何将您读取的未知大小的文件存储在内存中?因为阅读有点容易。逐字符读取效率很低(最好使用
getchar
)。如果你不想强加大小限制,我认为最好是制作一个链表,分配一块内存,读取直到它被填满,然后链接一个新的块,直到文件完成。你认为你的输入流的结尾是什么?马车回程?还有别的吗?@Amadan这不是关于文件流的。同样的事情。(事实上不一样,对于一个文件,你应该知道它的大小,所以我描述的内容就不需要了。)除非你的流没有终止;在这种情况下,你应该认真考虑什么,当你可以停止倾听的时候,你应该考虑什么。如果您应该始终继续收听,请退出进程或删除线程。如果您必须使用
scanf
,您可以检查其返回值-因为它有1个匹配项,它将在成功时返回1,感谢您的回复,但我无权拥有自己的退出字符。我只是有一个长度未知的字符流,我想一个接一个地读取这些字符,以便在我的场景中更容易地处理它们当你说一个接一个时,你的意思是你将写第一个字符,然后输入,然后第二个字符,然后输入。。。?或者你把所有的东西都写下来,然后输入,只是一个接一个地读?如果是第二次使用“\n”。我没有使用文件的权限,甚至不想使用它们。我不能使用像ctrl+d这样的东西。EOF对stdin有效吗?您将如何结束您的程序?谢谢@kkk,我尝试了EOF和getchar()的组合。成功了。您能帮助我使用scanf复制相同的功能吗?请检查此良好读数以确定scanf和@BalakrishnaAvulapati的复制情况。此代码基本正确,但ch必须声明为
int
。原因是
EOF
被定义为–1,
0xff
可能是有效字节。
while (ch != '@')
#include <stdio.h>
int main(void) 
{
    char ch;
    do 
    {
        ch = fgetc(stdin); 
        //do some comparison of ch
    }while( ch != EOF );

return 0;
}
./a.out < input.txt