C++ 在C语言中,每次从文件中读取字符块,在下一个循环中读取下一个字符块
假设我在文件中有100个字符。我想一次读10个字符,然后我想读第11-20个=10个字符,然后使用它们,以此类推 现在我如何使用C读取这段数据?也就是说,如果只剩下5个字符,那么它不应该出错,而是告诉我这次读了多少字符 在网上找到的所有方法都建议我一次读所有的字或一个接一个地读。我看到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解决方案是必需的,但是
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;ifread()
是一个顺序文件操作。您只需一直调用它,直到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++解决方案并尝试在我的项目中使用它们。