[英]File reading in C. Complications with fread function
我正在读取输入文件,并且在读取其中的每一行时遇到了麻烦。 我的输入文件有两种类型的记录。 一个有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
函数。 但是请注意, 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);
}
如果每个记录都在单独的行中,则使用fgets函数,该函数将在遇到换行符时停止,例如:
while(fgets(buf,LINESZ,ifp) != NULL)
{
//you can put your code here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.