Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C语言中,每次从文件中读取字符块,在下一个循环中读取下一个字符块_C++_C_File Io_Fread - Fatal编程技术网

C++ 在C语言中,每次从文件中读取字符块,在下一个循环中读取下一个字符块

C++ 在C语言中,每次从文件中读取字符块,在下一个循环中读取下一个字符块,c++,c,file-io,fread,C++,C,File Io,Fread,假设我在文件中有100个字符。我想一次读10个字符,然后我想读第11-20个=10个字符,然后使用它们,以此类推 现在我如何使用C读取这段数据?也就是说,如果只剩下5个字符,那么它不应该出错,而是告诉我这次读了多少字符 在网上找到的所有方法都建议我一次读所有的字或一个接一个地读。我看到 char but[20]; fread(buf, 1,10, fp); 这看起来很有希望。但我不能把它用于我的目的。在阅读了第1到第10个字符后,我如何指示将第11到第20个字符带出来 C解决方案是必需的,但是

假设我在文件中有100个字符。我想一次读10个字符,然后我想读第11-20个=10个字符,然后使用它们,以此类推

现在我如何使用C读取这段数据?也就是说,如果只剩下5个字符,那么它不应该出错,而是告诉我这次读了多少字符

在网上找到的所有方法都建议我一次读所有的字或一个接一个地读。我看到

char but[20];
fread(buf, 1,10, fp);
这看起来很有希望。但我不能把它用于我的目的。在阅读了第1到第10个字符后,我如何指示将第11到第20个字符带出来

C解决方案是必需的,但是C++的解决方案也可以使用。<> > P> <代码> Frad()/Cyto>是顺序文件操作。您只需一直调用它,直到EOF或

itemsread==0

do {
    itemsread = fread (buffer, sizeof(char), 10, fp);
    for (i=0; i<itemsread; i++)
        { ... }
} while (itemsread);
do{
itemsread=fread(缓冲区,大小为(字符),10,fp);
for(i=0;i
fread()
是一个顺序文件操作。您只需一直调用它,直到EOF或
itemsread==0

do {
    itemsread = fread (buffer, sizeof(char), 10, fp);
    for (i=0; i<itemsread; i++)
        { ... }
} while (itemsread);
do{
itemsread=fread(缓冲区,大小为(字符),10,fp);

对于(i=0;i我认为您试图一次处理10个字节,直到达到EOF? C库函数
int fgetc(FILE*stream)
从指定流中获取下一个字符(无符号字符),并前进流的位置指示器。因此,我们可以尝试将10个字节读入缓冲区,如果遇到EOF,我们将处理缓冲区中的
n
字节。 也许是这样的:

    int main ()
    {
        FILE *fp;
        char block[10] = {0};
        int c;
        int n = 0; //counter

        fp = fopen("file.txt","r");
        if(fp == NULL) return -1;

        while (c=fgetc(fp)!=EOF)
        {
            block[n] = (char)c;
            ++n;
            while(n < 10 && c=fgetc(fp)!=EOF){
                block[n] = char(c);
                ++n;
            }
            //read 10 chars or end of file find out
            if(c==EOF) {
                //you've read n bytes, do something with those n bytes and,
                break;
            }
            else {
                //do something with your 10 bytes and
                n = 0; // reset n
                continue; //not necessary
            }
        }
        fclose(fp);
        return 0;
    }
int main()
{
文件*fp;
字符块[10]={0};
INTC;
int n=0;//计数器
fp=fopen(“file.txt”,“r”);
if(fp==NULL)返回-1;
而(c=fgetc(fp)!=EOF)
{
块[n]=(字符)c;
++n;
而(n<10&&c=fgetc(fp)!=EOF){
块[n]=char(c);
++n;
}
//读取10个字符或文件末尾查找
如果(c==EOF){
//你已经读了n个字节,用这n个字节做点什么,
打破
}
否则{
//用你的10个字节和
n=0;//重置n
continue;//不需要
}
}
fclose(fp);
返回0;
}

我认为您试图一次处理10个字节,直到达到EOF? C库函数
int fgetc(FILE*stream)
从指定流中获取下一个字符(无符号字符),并前进流的位置指示器。因此,我们可以尝试将10个字节读入缓冲区,如果遇到EOF,我们将处理缓冲区中的
n
字节。 也许是这样的:

    int main ()
    {
        FILE *fp;
        char block[10] = {0};
        int c;
        int n = 0; //counter

        fp = fopen("file.txt","r");
        if(fp == NULL) return -1;

        while (c=fgetc(fp)!=EOF)
        {
            block[n] = (char)c;
            ++n;
            while(n < 10 && c=fgetc(fp)!=EOF){
                block[n] = char(c);
                ++n;
            }
            //read 10 chars or end of file find out
            if(c==EOF) {
                //you've read n bytes, do something with those n bytes and,
                break;
            }
            else {
                //do something with your 10 bytes and
                n = 0; // reset n
                continue; //not necessary
            }
        }
        fclose(fp);
        return 0;
    }
int main()
{
文件*fp;
字符块[10]={0};
INTC;
int n=0;//计数器
fp=fopen(“file.txt”,“r”);
if(fp==NULL)返回-1;
而(c=fgetc(fp)!=EOF)
{
块[n]=(字符)c;
++n;
而(n<10&&c=fgetc(fp)!=EOF){
块[n]=char(c);
++n;
}
//读取10个字符或文件末尾查找
如果(c==EOF){
//你已经读了n个字节,用这n个字节做点什么,
打破
}
否则{
//用你的10个字节和
n=0;//重置n
continue;//不需要
}
}
fclose(fp);
返回0;
}

…………使用STD::string和IOFixs的C++解决方案将是很好的(换句话说,您很舒服)翻译“它或切换到使用C++来代替?”我希望C解决方案,但是如果没有其他的方法来做,或者没有其他更好的方法,那么我可以接受C++解决方案并尝试在我的项目中使用。所以……使用STD::String和IoString的C++解决方案会很好(换句话说,你很舒服)翻译它或切换到使用C++来代替?@ CrasMSTR我想要一个C解决方案,但是如果没有其他的方法去做或者没有其他更好的方法,那么我可以接受C++解决方案并尝试在我的项目中使用它们。