我正在读取一个输入文件,但在读取其中的每一行时遇到了麻烦。我的输入文件有两种类型的记录。一个有 52 个字符,而另一个有 926 个字符。我不知道如何处理我的 fread 函数,以便它可以处理这两个记录。谁能帮我吗?谢谢
#define LINESZ 927 /* one extra byte for new line */
int num; /* integer for line number */
char buffer[LINESZ]; /* buffer for file read line */
int main()
{
FILE *ifp, *ofp;
ifp = fopen("dd:INPUTF", "r");
ofp = fopen("dd:OUTPUTF", "w");
while (!feof(ifp)) {
if (num = (fread(buffer, sizeof(char), LINESZ, ifp))) {
if (buffer[22] == 'O') {
printf("ravroot, %c\n", buffer[22]);
printf("%s*\n", buffer);
}
else if (buffer[22] == 'A') {
printf("ravrate, %c\n", buffer[22]);
printf("%s*\n", buffer);
}
}
}
fclose(ifp);
fclose(ofp);
return(0);
}
最佳答案
从文件中读取行时,您应该使用fgets
函数。但是请注意,fgets
会将换行符写入您的缓冲区,因此您需要删除换行符。生成的代码如下所示
#define LINESZ 1024 /* lots of extra bytes, memory is cheap */
char buffer[LINESZ]; /* buffer for file read line */
int main( void )
{
int length;
FILE *ifp, *ofp;
ifp = fopen("dd:INPUTF", "r");
ofp = fopen("dd:OUTPUTF","w");
while( fgets( buffer, LINESZ, ifp ) != NULL )
{
// remove the newline character, if any
length = strlen( buffer );
if ( length > 0 && buffer[length-1] == '\n' )
buffer[--length] = '\0';
if ( length > 22 )
{
if(buffer[22] == 'O')
{
printf("ravroot, %c\n", buffer[22]);
printf("%s*\n", buffer);
}
else if(buffer[22] == 'A')
{
printf("ravrate, %c\n", buffer[22]);
printf("%s*\n", buffer);
}
}
}
fclose(ifp);
fclose(ofp);
return(0);
}
关于c - C 中的文件读取。 fread 函数的并发症,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22497250/