C程序:错误的阅读和打印从文本文件中的特定列 [英] C program: Error reading and printing a particular column from a text file

查看:79
本文介绍了C程序:错误的阅读和打印从文本文件中的特定列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要打印从文本文件1PGB.pdb列6到一个输出文件走出去。以下是我的code:

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT; / *对于exit()函数* /
#定义ROW 500
#定义COL 12
诠释的main()
{
INT N6,垃圾;
FILE * FP;
FILE * OP =的fopen(走出去,W);
INT比分[ROW] [COL];
INT行,列,项,I,J;
如果((FP = FOPEN(1PGB.pdb,R))== NULL)
{
        的printf(打开文件时出错!);
        出口(1); / *如果文件指针返回NULL程序退出。 * /
}
为(行= 0;&行LT;排;排++)
{
COL = 5;
的fscanf(FP,%D,&安培;比分[行] [COL]);
fprintf中(OP,%D,成绩[行] [COL]);FCLOSE(FP);
    FCLOSE(OP);
 }
 返回0;
 }

它提供了以下错误。

错误`./$c$c1:双重释放或腐败(出):0x0000000000cde250 ***
中止(核心转储)

1PGB.pdb文件的前几行是:

  ATOM 1N的遇到了一个1 12.969 18.506 30.954 1.00 15.93ñ
ATOM 2 CA遇到了一个1 13.935 18.529 29.843 1.00 17.40Ç
ATOM的3C遇到了一个1 13.138 18.692 28.517 1.00 14.65Ç
ATOM 4 O遇到了一个1 12.007 18.222 28.397 1.00 13.04Ø
ATOM 5 CB遇到了一个1 14.733 17.216 29.882 1.00 20.72Ç
ATOM 6 CG遇到了一个1 15.742 16.983 28.738 1.00 23.81Ç
ATOM 7 SD遇到了一个1 17.378 17.025 29.359 1.00 28.11小号
ATOM 8 CE遇到了一个1 17.166 16.055 30.819 1.00 27.51Ç
ATOM 9 N THR A 2 13.719 19.413 27.573 1.00 12.63ñ
ATOM 10 CA THR A 2 13.088 19.661 26.283 1.00 12.68Ç
ATOM(11)C THR A 2 13.561 18.631 25.300 1.00 12.02Ç
ATOM 12 O THR A 2 14.763 18.432 25.121 1.00 13.07Ø
ATOM 13 CB THR A 2 13.527 20.980 25.667 1.00 14.62Ç


解决方案

这似乎是一个不错的,简单的方法:

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;诠释的main()
{
    焦线[1000];
    INT N6;
    FILE *计划生育=的fopen(1PGB.pdb,R);
    FILE * OP =的fopen(走出去,W);    如果(FP == NULL ||运算== NULL)
    {
        fprintf中(标准错误,打开文件时出错。);
        出口(1);
    }    而(与fgets(线,的sizeof(线),FP)!= 0)
    {
        / *使用%* s使用scanf函数时跳过一个字。 * /
        sscanf的(行,%* S *%S%* S *%S%* S%D,&安培; N6);
        fprintf中(OP,%d个\\ N,N6);
    }
    返回0;
}

I want to print column 6 from a text file "1PGB.pdb" into an output file "out". Following is my code:

#include <stdio.h>
#include <stdlib.h> /* For exit() function*/
#define ROW 500
#define COL 12
int main()
{
int n6, garbage;
FILE *fp;
FILE *op = fopen("out", "w");
int score[ROW][COL];
int row, col, item, i, j;
if ((fp=fopen("1PGB.pdb","r"))==NULL)
{
        printf("Error! opening file");
        exit(1);         /* Program exits if file pointer returns NULL. */
}
for(row=0; row<ROW; row++)
{
col=5;


fscanf(fp, "%d", &score[row][col]);
fprintf(op, "%d", score[row][col]);

fclose(fp);
    fclose(op);
 }
 return 0;
 }

It gives the following error.

Error in `./Code1': double free or corruption (out): 0x0000000000cde250 *** Aborted (core dumped)

The first few lines of 1PGB.pdb file are:

ATOM      1  N   MET A   1      12.969  18.506  30.954  1.00 15.93           N  
ATOM      2  CA  MET A   1      13.935  18.529  29.843  1.00 17.40           C  
ATOM      3  C   MET A   1      13.138  18.692  28.517  1.00 14.65           C  
ATOM      4  O   MET A   1      12.007  18.222  28.397  1.00 13.04           O  
ATOM      5  CB  MET A   1      14.733  17.216  29.882  1.00 20.72           C  
ATOM      6  CG  MET A   1      15.742  16.983  28.738  1.00 23.81           C  
ATOM      7  SD  MET A   1      17.378  17.025  29.359  1.00 28.11           S  
ATOM      8  CE  MET A   1      17.166  16.055  30.819  1.00 27.51           C  
ATOM      9  N   THR A   2      13.719  19.413  27.573  1.00 12.63           N  
ATOM     10  CA  THR A   2      13.088  19.661  26.283  1.00 12.68           C  
ATOM     11  C   THR A   2      13.561  18.631  25.300  1.00 12.02           C  
ATOM     12  O   THR A   2      14.763  18.432  25.121  1.00 13.07           O  
ATOM     13  CB  THR A   2      13.527  20.980  25.667  1.00 14.62           C  

解决方案

This seems like a good, simple approach:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char line[1000];
    int n6;
    FILE *fp = fopen("1PGB.pdb", "r");
    FILE *op = fopen("out", "w");

    if (fp == NULL || op == NULL)
    {
        fprintf(stderr, "Error opening file.");
        exit(1);
    }

    while (fgets(line, sizeof(line), fp) != 0)
    {
        /* Use "%*s" to skip a word when using scanf. */
        sscanf(line, "%*s %*s %*s %*s %*s %d", &n6);
        fprintf(op, "%d\n", n6);
    }
    return 0;
}

这篇关于C程序:错误的阅读和打印从文本文件中的特定列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆